首页 > 解决方案 > 不访问 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 应用程序

我给应用程序池提供了“网络服务”

我将“网络服务”提供给已发布的文件夹

标签: c#asp.netexcelpermissionsnetoffice

解决方案


TL;博士; NetOffice 是一个错误的库来做你想做的事。它不打算在服务器上使用,并且您不应该在服务器上安装 Excel


NetOffice 是一个 COM 互操作库,允许您与安装在运行 Windows 客户端的用户计算机上的 Excel 进行交互。

Microsoft 不支持 Windows Server 上的 Excel,如其著名的KB257757 - Office 服务器端自动化的注意事项所述。

要在服务器上读取 Excel 文件,您应该使用可以直接读取/写入 Excel 文件的工具,无需在服务器上安装 Excel。

如果您正在阅读 Excel 2017+ 文件(即.xlsx),您可以使用Open XML SDK或任何其他OpenXml兼容的库,例如ExcelDataReaderClosedXML

如果您需要读取旧的 Excel 文件(即.xls),您可以使用ExcelDataReaderNPOI或类似的库来读取旧的 Excel 二进制文件格式。


推荐阅读