2017-05-17 110 views
0

我想打开并更新IIS服务器上的xls文件并将其作为下载发送给用户。以下代码正在开发IIS Express环境下正常工作。但是当我在IIS服务器上部署它时,服务器似乎挂在Workbooks.open函数上。IIS无法打开XLS

// Copy template to the given file 
      System.IO.File.Copy(Server.MapPath("~") + "\\App_Data\\template.xls", file, true); 

      // Get current project id 
      int activeProjectID = Convert.ToInt32(Session["activeProjectID"]); 

      // Open workbook 
      oXL = new Microsoft.Office.Interop.Excel.Application(); 
      oXL.Visible = true; 
      oXL.DisplayAlerts = false; 
      mWorkBook = oXL.Workbooks.Open(file, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false); 

      //Get all the sheets in the workbook 
      mWorkSheets = mWorkBook.Worksheets; 

回答

1

使用Office Interop库进行服务器端自动化不是受支持的方案,而是在寻求麻烦。它会产生很多的问题,因为:

  1. 需要用户身份
  2. 他们与桌面交互
  3. 他们没有重入和可扩展性

“微软目前并不提倡并且不支持从任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)自动化Microsoft Office应用程序,因为Office可能会在Office出现时出现不稳定行为和/或死锁跑 在这个环境中。“

https://support.microsoft.com/en-us/help/257757/considerations-for-server-side-automation-of-office

+0

感谢奥斯卡,有什么其他选择呢?我需要用数据库中的宏创建一个excel文件。 – Tom

+0

@Tom如果您绝对需要使用旧的xls二进制格式,请使用Office 2003 XML格式或Open XML或Aspose Cells等第三方库https://www.aspose.com/products/cells/net – Oscar