c# - 不访问 IIS 中的 xls 文件
问题描述
我正在尝试使用 web api 2 服务打开 xls 文件并转换为 pdf。当我在 vs 2013 中启动服务项目时,一切工作正常,但是当我将服务发布到 iis 8.0 并尝试打开 excel 文件时出现错误:
错误:
调用的目标已引发异常。在 System.RuntimeType.InvokeDispMethod(字符串名称,BindingFlags invokeAttr,对象目标,Object[] args,Boolean[] byrefModifiers,Int32 文化,String[] namedParameters)在 System.RuntimeType.InvokeMember(字符串名称,BindingFlags bindingFlags,Binder binder, NetOffice.Invoker.MethodReturn(COMObject comObject, String name, Object[] paramsArray) 上的对象目标、Object[] providedArgs、ParameterModifier[] 修饰符、CultureInfo 文化、String[] namedParams)
此行错误:
var workbook = excelApplication.Workbooks.Open(excelLocalOutput, 0, false, 5, 123, 123, true, XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
我试图解决这个问题:
我将“网络服务”和“IUSRS”权限授予 Microsoft Excel 应用程序
我给应用程序池提供了“网络服务”
我将“网络服务”提供给已发布的文件夹
解决方案
TL;博士; NetOffice 是一个错误的库来做你想做的事。它不打算在服务器上使用,并且您不应该在服务器上安装 Excel。
NetOffice 是一个 COM 互操作库,允许您与安装在运行 Windows 客户端的用户计算机上的 Excel 进行交互。
Microsoft 不支持 Windows Server 上的 Excel,如其著名的KB257757 - Office 服务器端自动化的注意事项所述。
要在服务器上读取 Excel 文件,您应该使用可以直接读取/写入 Excel 文件的工具,而无需在服务器上安装 Excel。
如果您正在阅读 Excel 2017+ 文件(即.xlsx
),您可以使用Open XML SDK或任何其他OpenXml
兼容的库,例如ExcelDataReader或ClosedXML。
如果您需要读取旧的 Excel 文件(即.xls
),您可以使用ExcelDataReader、NPOI或类似的库来读取旧的 Excel 二进制文件格式。
推荐阅读
- android - 我可以在 android studio 中为数据库使用所有 SQL 命令吗?
- javascript - 动态选择导轨
- javascript - 如何在 React (Hooks) 中从数组状态中删除元素
- php - PHP Mailer - 454 TLS 连接失败
- python - 如何从多个子流程公开普罗米修斯指标?
- histogram - Stata彼此相邻绘制直方图
- google-cloud-platform - 使用 python 和 Google Cloud Datacatalog 批量标记 Bigquery 列
- javascript - setTimeOut 在 for loop Javascript React 内部不起作用
- c# - Azure WebService 找不到我的程序集之一,但它基于 Azure 控制台存在
- python - 机器学习功能专栏