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();
}
}
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
http://www.google.com/#hl=fr&q=InteropServices+COMException+0x800A03EC+Document+not+saved&aq=f&oq=&aq==fp=1mZ_-PL2Zjc –
@Charlie, ce serait génial. Ou même un outil qui peut vous donner un aperçu de ce qui se passe. – Chris