在 VSTO Excel Addin 中调用 Azure 文档智能 API

问题描述 投票:0回答:1

这可能是由于我对 VSTO 插件缺乏了解,但我根本无法从应用程序内调用 Azure 文档智能调用。我制作了一个常规控制台应用程序,只是为了测试我的配置和密钥是否正常工作,并且我可以毫无问题地调用 API,只有当我尝试在我的 Addin 项目中使用它时才会出现这种情况。

using System;
using System.IO;
using System.Threading;

using Azure;
using Azure.AI.FormRecognizer.DocumentAnalysis;


namespace ExcelAddIn
{
    public partial class ThisAddIn
    {


        static string key2 = "KEY";
        static string endpoint2 = "ENDPOINT";

        static string imagepath = "Path on disk";

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {

            //Authenticate
            AzureKeyCredential credential = new AzureKeyCredential(key2);
            DocumentAnalysisClient client = new DocumentAnalysisClient(new Uri(endpoint2), credential);

            //Send file on local disk to OCR
            LaunchOCR(client);
        }



        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }


        public void LaunchOCR(DocumentAnalysisClient c)
        {
            AnalyzeDocumentOperation operation = c.AnalyzeDocument(WaitUntil.Completed, "prebuilt-invoice", (Stream)File.Open(imagepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));

            AnalyzeResult result = operation.Value;
           
        }


        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }
        
        #endregion
    }
}

就像我说的,这种代码在插件之外运行良好,但它会抛出以下错误:https://pastebin.com/RE8QX0Us

我成功调用了一个简单的REST API,看看是否与Excel访问互联网有关,所以我真的不知道这是代码问题,网络问题,配置问题。我还确认插件加载正确,我使用 Microsoft 提供的示例在保存时创建一个新行,效果很好

excel azure vsto ocr excel-addins
1个回答
0
投票

该错误表明存在一些与网络相关的问题,但如果您的控制台应用程序运行在在 Excel 中产生错误的同一台计算机上,那么这不应该是问题。特别是因为您可以通过互联网拨打休息电话。

插件通常在单线程设备中运行,这可以影响异步操作。您可以尝试使用 Task.Run() 和 Wait() 让请求在单独的线程上运行。

public void LaunchOCR(DocumentAnalysisClient c)
{
    try
    {
        Task.Run(() =>
        {
            AnalyzeDocumentOperation operation = c.AnalyzeDocument(WaitUntil.Completed, "prebuilt-invoice", (Stream)File.Open(imagepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
            AnalyzeResult result = operation.Value;
        }).Wait();
    }
    catch (AggregateException ae)
    {
        // Handle the AggregateException
        ae.Handle((x) =>
        {
            if (x is RequestFailedException rfe)
            {
                System.Windows.Forms.MessageBox.Show($"Error analyzing document: {rfe.Message}");
                return true;
            }
            // Handle other exceptions
            System.Windows.Forms.MessageBox.Show($"An error occurred: {x.Message}");
            return true;
        });
    }
}

我能想到的唯一一件事是,如果您的控制台应用程序附加到编译器(例如 Visual Studio),并且您以管理员身份运行,请尝试提升 Excel 以查看是否正在进行某些特权操作.

© www.soinside.com 2019 - 2024. All rights reserved.