none
C#からExcelを経由して保存・印刷した時に「CLSIDを含むコンポーネントのエラー:0x80080005 サーバーの実行に失敗しました」が発生 RRS feed

  • 質問

  • Excelを経由して保存・印刷を行うC#のアプリケーションがあります。同アプリケーションを実行した時に

    CLSID(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)を含むコンポーネント
    のCOMクラスファクトりを取得中に、次のエラーが発生しました:0x80080005
    サーバーの実行に失敗しました(HRESULTからの例外:0x80080005
    (CO_E_SERVER_EXEC_FAILURE))。

    が発生する事がありました。(OK押下後に「Excelは動作を停止しました」メッセージを表示)
    事象はアプリケーションから「Excelを保存・印刷する」毎に繰り返し発生してましたが、PCの再起動でエラーは解消し、その後は再発していません。
    このエラーの考えられる原因ご教授いただけないでしょうか。

    ■環境
    ・Windows7(.NetFramework4.5.2含む)
    ・Excel2010
    ・C#アプリケーション(コンパイル時.Net Frameworkは4.5を指定)
    ■C#の該当箇所実装
    ・アプリケーションインスタンス新規:      -----------------------------------------------
     dynamic m_XlsApp = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application"));
     // ワークブックオブジェクト作成
     dynamic m_xlsBooks = m_XlsApp.Workbooks;

    ・Excel保存:     ----------------------------------------------------------
     public void OtherNameSave(string strName)
     {
       //エクセルファイル保存
       m_XlsApp.DisplayAlerts = false;
       m_XlsApp.ActiveWorkbook.SaveAs(strName);
       m_XlsApp.DisplayAlerts = true;
     }

    ・値設定:        ----------------------------------------------------------
     public void SetDataWithName(string areaName, object setData)
     {
         m_XlsApp.Range(areaName).Value = setData;
     }

                   
    2020年12月30日 10:19

すべての返信

  • JSC_Systemさん、こんにちは。フォーラムオペレーターのKumoです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    こちらでテストしたところ、再現できました。
    このエラーはワークブックで値を設定することができないということです。

    Excelファイルに値を変更し、別の名前でファイルを保存する方法については、下記のようにコードサンプルを作成しました。
    最初に、NuGetパッケージ管理> Microsoft.Office.Interop.Excelをインストールする必要があります。

    コード:
    using Excel = Microsoft.Office.Interop.Excel;
    
     
    
            Excel.Application app = new Excel.Application();
    
            Excel.Workbook workbook=null;
    
            Excel.Worksheet worksheet = null;
    
            private void button1_Click(object sender, EventArgs e)
    
            {
    
                string path = "E:\\Excel1.xlsx";
    
                workbook = app.Workbooks.Open(path);
    
                worksheet = workbook.Sheets[1];
    
                SetDataWithName("B2", 35);
    
                OtherNameSave("E:\\test.xlsx");
    
                workbook.Close();
    
                MessageBox.Show("success");
    
            }
    
     
    
            public void OtherNameSave(string strName)
    
            {
    
                //エクセルファイル保存
    
                app.DisplayAlerts = false;
    
                workbook.SaveAs(strName);
    
                app.DisplayAlerts = true;
    
            }
    
           public void SetDataWithName(string areaName, object setData)
    
            {
    
                worksheet.Range[areaName].Value = setData;
    
            }

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2021年1月4日 6:53
    モデレータ