我正在尝试打开xls文件并使用Web api 2服务转换为pdf。 当我在vs 2013中启动服务项目时,everinging效果很好,但是当我将服务发布到iis 8.0并尝试打开excel文件时,出现错误:
错误:
调用的目标已引发异常。 在System.RuntimeType.InvokeDispMethod(String name,BindingFlags invokeAttr,Object target,Object [] args,Boolean [] byrefModifiers, Int32文化,String [] namedParameters) 在System.RuntimeType.InvokeMember(字符串名称,BindingFlags bindingFlags,活页夹装订器,对象目标,Object []提供的Args, ParameterModifier []修饰符,CultureInfo文化,字符串[] namedParams) 在NetOffice.Invoker.MethodReturn(COMObject comObject,字符串名称,Object [] paramsArray)
此行错误:
var workbook = excelApplication.Workbooks.Open(excelLocalOutput, 0, false, 5, 123, 123, true, XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
我试图解决的问题:
我向Microsoft Excel授予了“网络服务”和“ IUSRS”权限 申请
我为应用程序池提供了“网络服务”
我为发布的文件夹提供了“网络服务”
答案 0 :(得分:1)
TL; DR; NetOffice是执行您想要的错误的库。它不打算在服务器上使用,您不应该在服务器上安装Excel 。
NetOffice是一个COM Interop库,通过它可以与运行Windows客户端的用户计算机上安装的Excel进行交互。
Microsoft不支持Windows Server上的Excel ,如其著名的KB257757-Considerations for server-side Automation of Office所述。
要在服务器上读取Excel文件,您应该使用可以直接读取/写入Excel文件的工具,无需则要求在服务器上安装Excel。
如果您正在读取Excel 2017+文件(即.xlsx
),则可以使用Open XML SDK或任何其他OpenXml
兼容的库,例如ExcelDataReader或{ {3}}。
如果您需要读取较旧的Excel文件(即.xls
),则可以使用ClosedXML,ExcelDataReader或类似的库来读取旧的Excel二进制文件格式。