2009-06-10 5 views
2

COMExceptions/HRESULTSの詳細を持つサイト(Microsoft以外の場合でも)が誰でも知っていますか?COMException内訳

私はコピー()関数を使用した後、私のExcelワークブックを保存しようとしたとき、私はこのエラーを受け取っ:

ERROR - Unable to SaveWorkbook() 
System.Runtime.InteropServices.COMException (0x800A03EC): Document not saved. 

P.S.私は10K +ファイルのタイトなループでこれをやっていますが、ファイルを読むことはうまくいきましたが、それらを保存することは楽しいことではありません。

また、Copy()機能を使用するときに誰かがExcelの出血メモリの問題を抱えていることがわかっています。

ありがとうございます!誰もがさらに明確化する必要がある場合

P.S.S私は

編集1

を教えてくださいここで何が起こっているのです。私はいくつかの変換を実行して、元のシートを更新し、新しいシート(同じワークブック)にアクティブシートをコピーして、いくつかのXLSファイル(実際には10K +)を更新するように求められました。問題は、ワークブックを保存するときに発生します。ここで

は自分のアプリケーションからいくつか抜粋です:

///.... UpdateSpreadsheet() Routine 
Microsoft.Office.Interop.Excel.Workbook wb = null; 

try 
{ 
    wb = ef.GetWorkbook(fileName, false, true); 
} 
catch (Exception ex) 
{ 
    logger.Error(ex.ToString()); 
} 

Microsoft.Office.Interop.Excel.Worksheet ws = null; 

try 
{ 
    ws = wb.Sheets[Foo.WorksheetName] as Microsoft.Office.Interop.Excel.Worksheet; 
} 
catch (Exception ex) 
{ 
    logger.Error(ex.ToString()); 
} 

bool result = false; 

if (ws != null) 
    result = ef.CopyWorksheet(ws, Foo.WorksheetName); 

if (result) 
{ 
    //... update the sheet as appropriate 
} 

try 
{ 
    ef.SaveWorkbook(wb, fileName); //eventually this line crashes, it's random, but so far after the 500th file, and I get that COM Exception. 
    //.. update Foo object to reflect copied worksheet 
} 
catch (Exception ex) 
{ 
    //something happened, we can't save, so close and destroy the workbook 
    logger.Error("Unable to SaveWorkbook()", ex); 
} 
finally 
{ 
    ef.DestoryWorkbook(wb, fileName); 
    ef.DestroyWorksheet(ws); 
} 

//// CopyWorksheet() Method 
public bool CopyWorksheet(Worksheet ws, String sourceSheet) 
{ 
    try 
    { 
     try 
     { 
      Worksheet sheet = GetWorksheet(sourceSheet + " (2)"); 

        //I don't think the below is necessary, but I'm paranoid about memory leaks 
      ExcelTools.OfficeUtil.ReleaseRCM(sheet); 
      sheet = null; 

      return false; 
     } 
     catch (Exception) 
     { 
      ws.Copy(Missing.Value, ws); //this line never errors out 
     } 

     return true; 
    } 
    catch (Exception) 
    { 
     return false; 
    } 
    finally 
    { 
     ws.Activate(); 
    } 
} 

/// SaveWorkbook() 
public void SaveWorkbook(Workbook wb) 
{ 
    if (wb != null) 
    { 
     wb.Save(); 
    } 
} 
+0

さまざまなHRESULTの意味についての文書を要求していますか?それはあなたが求めていることをより明確にするために質問を再提示するのに役立つかもしれません。 – Charlie

+0

http://www.google.com/#hl=en&q=InteropServices+COMException+0x800A03EC+Document+not+saved&aq=f&oq=&aqi=&fp=1mZ_-PL2Zjc –

+0

@Charlie、それは素晴らしいでしょう。また、何が起こっているかについてのいくつかの洞察を与えるツールでもあります。 – Chris

答えて

0

あなたがHRESULT値をブレークダウンした場合、ファシリティコードがFACILITY_CONTROLで、エラーコードはいくつかのオンライン検索から1004である、それは、このコード表示されます様々な異なるエラーのために生成され、その一部はワークシートをプログラムによってコピーするように見える(例えばthis KB article参照)。

あなたがやっていることの詳細や、search online for this HRESULTを投稿して、他の人があなたのやりたいことに似ているかもしれない問題を見てください。