2017-01-09 150 views
0

我想產生的.xlsx電子表格導出爲PDF。 我有兩個問題:的Microsoft Office Excel的互操作ExportAsFixedFormat - 很慢,圖像不加載

  • 導出文件是兩個方法非常緩慢 - 另存爲()ExportAsFixedFormat()
  • ExportAsFixedFormat不導出圖像。

我正在與IIS ASP.NET服務器的代碼。 https://support.comodo.com/index.php?/Knowledgebase/Article/View/1129/66/access-denied-exception-from-hresult-0x80070005-e_accessdenied

從這個庫中的代碼,而不會出現錯誤:https://github.com/aardvarkss/ExcelPDFExport

而且我生成EPPlus .xlsx文件

喜歡這裏說的已經配置的權限。

代碼:

Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); 
    Microsoft.Office.Interop.Excel.Workbooks excelWorkbooks = app.Workbooks; 
    Microsoft.Office.Interop.Excel.Workbook wkb = excelWorkbooks.Open(this.tempExcelFilePath); 

    foreach (Microsoft.Office.Interop.Excel.Worksheet sheet in wkb.Sheets) 
    { 
     sheet.SaveAs(this.tempPdfFilePath); // Saves the PDF correct AS I want But it cannot finish the task (waiting around 3 mins) 
     sheet.ExportAsFixedFormat(Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF, this.tempPdfFilePath); // Export PDF without image (image currently cannot be displayed), Also slow 
    } 

    wkb.SaveAs(this.tempPdfFilePath); // Waiting too long and cannot be finished 
    wkb.ExportAsFixedFormat(Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF, "C:\\Users\\user222\\Desktop\\Sample.pdf"); // Waiting too long and cannot be finish the task 

    // Closes the EXCEL.exe process in windows. If it not closes it cause errors. 
    wkb.Close(SaveChanges: false); 
    excelWorkbooks.Close(); 
    app.Quit(); 

    System.Runtime.InteropServices.Marshal.ReleaseComObject(wkb); 
    System.Runtime.InteropServices.Marshal.ReleaseComObject(excelWorkbooks); 
    System.Runtime.InteropServices.Marshal.ReleaseComObject(app); 

任何想法,爲什麼它這麼慢?以及如何解決我的問題?

的加載速度慢今天開始。在此之前,它沒有加載緩慢的問題。

+0

互操作既不旨在也不建議在服務器應用中使用。檢查TaskManager是否沒有孤立的EXCEL.EXE。 – Alex

+0

在到達新的Microsoft.Office.Interop.Excel.Application();行之前進行調試時,在任務管理器中沒有EXCEL.EXE進程。 – mihkov

+0

好吧,我想它應該是Excel或源文件,因爲它在今天之前工作。嘗試重新安裝服務器,看看它是否會有所作爲。 – Alex

回答

1

I am running the code in ASP.NET server with IIS.

微軟目前並不提倡,不支持,Microsoft Office應用程序自動化從任何無人蔘與的非交互式客戶端應用程序或組件(包括ASP,ASP.NET,DCOM和NT Service),因爲Office在此環境中運行時可能會出現不穩定的行爲和/或死鎖。

如果您要構建在服務器端上下文中運行的解決方案,你應該嘗試使用已取得安全的無人蔘與的執行部件。或者,您應該嘗試找到允許至少部分代碼運行客戶端的替代方案。如果您從服務器端解決方案使用Office應用程序,則該應用程序將缺少成功運行所需的許多必要功能。此外,您將面臨整體解決方案穩定性的風險。請閱讀Considerations for server-side Automation of Office文章中的更多內容。

我建議使用Open XML SDK而是看Welcome to the Open XML SDK 2.5 for Office。您也可以考慮使用專爲服務器端執行而設計的第三方組件。

+0

感謝您的回覆。我會同意你的意見。但使用Open XML SDK 2.5 for Office對我而言並不複雜。我將使用'iTextSharp'作爲替代。 – mihkov

相關問題