c# - 当我在 azure devops 管道中运行构建(vstest)时无法打开 Excel
问题描述
我正在使用 Microsoft.Office.Interop.Excel 打开 excel 工作簿来为给定项目执行一些自动化操作。当我运行我的构建时,我遇到了这个错误
System.Runtime.InteropServices.COMException:检索具有 CLSID {00024500-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(来自 HRESULT 的异常:0x80040154 (REGDB_E_CLASSNOTREG))。
这来自我的视觉工作室中的这段代码。excel.Application x1app = new excel.Application();
我可以在本地运行测试,但是当我在 azure devops 中运行它时,它不起作用。我相信这是因为 devops 内部没有 excel,因此无法执行代码。
- 有什么办法可以在仍然使用互操作的同时解决这个错误?
除了 EPPlus 之外,我还有其他选择吗?
excel.Application x1app = new excel.Application(); x1app.SheetsInNewWorkbook = 1; x1app.Visible = true; excel.Workbook x1workbook = x1app.Workbooks.Open(); excel.Workbook NewWorkBook = x1app.Workbooks.Add(); for (sheets) { excel._Worksheet x1worksheet = x1workbook.Sheets[x]; x1worksheet.Copy(Type.Missing, After: NewWorkBook.Sheets[x - 3]); } Thread.Sleep(2000);
我应该能够在 devops 上成功运行构建
解决方案
根据您的描述,您正在执行的操作需要在构建代理上安装 Excel。
如果你在 Azure DevOps 中使用主机生成代理。好像机器上没有安装。您可以找到安装在 Azure Pipelines 托管代理池中的计算机上的完整软件列表,例如此Azure Pipelines Hosted VS2017 映像。
作为一种解决方法,如果 Microsoft 托管的代理不能满足您的需求,那么您可以部署自己的自托管代理。
只需确保您的自托管代理环境与您的本地开发环境相同。
此外,您对excel的详细使用情况并不完全清楚。您也可以尝试使用 openxml。请在此处查看类似的问题:如何在 VSTS 中构建包含 Excel 创建的项目?
推荐阅读
- python-3.x - 当需要 getter 和 setter 方法时如何在 Python 模块之间共享变量
- snowflake-cloud-data-platform - 有没有办法使用任务或存储过程自动将雪花中的数据卸载到本地机器?
- r - cmdscale(dist, k = k) 中的错误:在 phyloseq 中执行 plot_heatmap 时,“d”中不允许存在 NA 值
- php - 使用 Docker WSL2 cUrl 错误窗口创建新的 Laravel 项目
- jwt - 生成 JWT 密钥对
- python - 如何使用python检查youtube视频是否存在?
- if-statement - IF 语句重构的理论?
- python - 如何在 Python 中读取 blob 数据
- amazon-web-services - 如何在不手动检查的情况下使用 AWS 状态仪表板进行更新?
- angular - 类型 TranslateModule 没有 'ɵmod' 属性