2009-06-10 8 views
2

Est-ce que quelqu'un sait si un site (même non-Microsoft), qui a des détails sur COMExceptions/HRESULTS.COMException Breakdown

Quand je tentais de sauver mon classeur Excel après avoir utilisé la fonction Copier(), j'ai reçu cette erreur:

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

post-scriptum Je le fais dans une boucle serrée pour les fichiers 10K +, mais la lecture des fichiers a bien fonctionné, mais les sauvegarder s'avère peu amusant.

Aussi, si quelqu'un a eu le problème de mémoire d'hémorragie Excel lorsque vous utilisez la fonction Copy() faites le moi savoir.

Merci!

P.S.S Si quelqu'un a besoin d'éclaircissements s'il vous plaît laissez-moi savoir

Modifier 1

Voici ce qui se passe. On m'a demandé de mettre à jour certains fichiers XLS (10K + en fait), en copiant la feuille active sur une nouvelle feuille (même classeur) et mettre à jour la feuille originale en effectuant une conversion. Le problème vient quand je sauvegarde le classeur.

Voici quelques extraits de ma demande:

///.... 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

Demandez-vous de la documentation sur les significations des différents HRESULT? Cela pourrait aider à reformuler la question pour être plus explicite sur ce que vous demandez. – Charlie

+0

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

+0

@Charlie, ce serait génial. Ou même un outil qui peut vous donner un aperçu de ce qui se passe. – Chris

Répondre

0

Si vous décomposez la valeur HRESULT, le code de l'établissement est FACILITY_CONTROL, et le code d'erreur est 1004. De quelques recherches en ligne, il semble que ce code est généré pour une variété d'erreurs différentes, dont certaines semblent liées à la copie de feuilles de calcul par programme (voir par exemple this KB article).

Il peut être utile de poster plus de détails sur ce que vous faites, ou search online for this HRESULT et de voir quels problèmes les autres ont pu avoir qui ressemblent à ce que vous faites.

Questions connexes