2017-01-09 169 views
0

生成された.xlsxスプレッドシートをPDFとしてエクスポートしたい。画像をエクスポートしない名前を付けて保存()ExportAsFixedFormat() Microsoft Office Interop Excel ExportAsFixedFormat - 非常に遅い、画像がロードされない

  • ExportAsFixedFormat -

    • エクスポート文書は、両方の方法のために非常に遅いです: は、私は2つの問題を抱えています。

    IISでASP.NETサーバーでコードを実行しています。

    https://github.com/aardvarkss/ExcelPDFExportはまた、私はEPPlusとの.xlsxファイルを生成します。このリポジトリからhttps://support.comodo.com/index.php?/Knowledgebase/Article/View/1129/66/access-denied-exception-from-hresult-0x80070005-e_accessdenied

    コードがエラーなしで動作します。それは、ここで述べているように

    は、すでにアクセス権を設定しました。

    コード:

    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

    Interopは、サーバーアプリケーションで使用するように設計されておらず、推奨もされていません。孤立したEXCEL.EXEが残っていない場合は、TaskManagerをチェックインしてください。 – Alex

    +0

    'new Microsoft.Office.Interop.Excel.Application();'行に達する直前にデバッグを行うと、タスクマネージャにEXCEL.EXEプロセスはありません。 – mihkov

    +0

    それは、それが今日以前に働いていたので、Excelまたはソースファイルのいずれかでなければならないと思います。サーバを再起動して、それが何か変わるかどうか確認してください。 – Alex

    答えて

    1

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

    Microsoftがあるため、(ASP、ASP.NET、DCOM、およびNTサービスを含む)任意の無人、非対話型クライアントアプリケーションまたはコンポーネントから、Microsoft Officeアプリケーションのオートメーションを現在推奨していませんし、サポートしていません。 Officeがこの環境で実行されると、Officeが不安定な動作やデッドロックを起こすことがあります。

    サーバー側のコンテキストで実行されるソリューションを構築する場合は、無人で実行するために安全にされたコンポーネントを使用するようにしてください。または、コードの少なくとも一部がクライアント側で実行できるようにする代替手段を見つけようとする必要があります。サーバー側のソリューションからOfficeアプリケーションを使用する場合、アプリケーションには正常に実行するために必要な機能が不足しています。さらに、全体的なソリューションの安定性でリスクを冒すことになります。詳細については、Considerations for server-side Automation of Officeの記事をご覧ください。

    Open XML SDKを代わりに使用することをお勧めします(Welcome to the Open XML SDK 2.5 for Officeを参照)。また、サーバー側の実行用に設計されたサードパーティコンポーネントの使用を検討することもできます。

    +0

    返信ありがとうございます。私はあなたに同意するでしょう。 Office用のOpen XML SDK 2.5を使用することは私にとっては少し複雑です。代わりに 'iTextSharp'を使用します。 – mihkov

    関連する問題