8
votes

Erreur lors de l'ouverture d'un classeur Excel à l'aide du code C #

J'essaie d'ouvrir un classeur Excel et d'essayer d'obtenir une feuille de calcul. ExcelApp.workbooks.Open Line propose une exception comme

System.RunTime.InterServices.ComeXception de HRESULT: 0x800A03ec sur Microsoft.Office.interop.excel.workbooks.open P> BlockQuote>

Voici mon code: P>

Excel.Application excelApp = new Excel.ApplicationClass();
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(strWBPath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing, true);


1 commentaires

Quel type d'application c'est? Application de console? asp.net/winforms?


4 Réponses :


0
votes

Et si vous essayez system.reflection.missing.value au lieu de type.MISSING?

Cordialement,

m.


0 commentaires

0
votes

Quelle classe utilisez-vous? XXX PRE>

Si cela essayez ensuite de le modifier sur P>

Microsoft.Office.Interop.Excel.Application


0 commentaires

7
votes

(désolé d'avoir répondu à cette ancienne question, mais c'est le résultat de Google # 1 pour ce problème et la réponse correcte est manquante).

L'erreur se produit car Excel pense que le classeur a été corrompu. Lors de l'ouverture du fichier Excel, le dernier paramètre raconte Excel comment gérer cette situation. Pass microsoft.office.interop.excel.xlcorruptload.xlexcel.xlcorruptload.xlexcel.xlcorruptload.xlexcel.xlcorrupload.xlexcel.xlcorrupt.ext> Pour lui demander de récupérer les données (cela ouvrira une pop up complet à l'utilisateur Excel essayé d'extraire les données si le fichier est corrompu). p>

Cependant, j'ai remarqué que ce problème peut également être causé si le classeur que vous essayez d'ouvrir a une locale différente de celle de votre Excel (a été enregistré sur une machine à l'aide d'un autre réglage de la langue) ou de votre système ne disposant pas de la FR-US Ensemble locale. P>

Bien que cela soit extrêmement stupide, il est facile de surmonter. Pour moi, la solution consistait à définir la locale actuelle sur en-nous avant d'ouvrir le fichier: p>

static System.Globalization.CultureInfo oldCI;
oldCI = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
xlWorkBook = xlApp.Workbooks.Open(filePath, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, Microsoft.Office.Interop.Excel.XlCorruptLoad.xlExtractData);
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI;


0 commentaires

0
votes

Si cela aide quelqu'un d'autre, j'ai perdu des tonnes de temps sur celui-ci. Je passais microsoft.office.interop.excel.xlcorruptload.xlrepairfile pour le paramètre CorrupteDload pour tous les fichiers, pensant que cela signifiait "Ouvrir le fichier, et s'il est corrompu, tenter une réparation". Cela a travaillé pour la plupart des fichiers.

Cependant, pour certains dossiers, j'avais toujours l'exception (exception de Hresult: 0x800A03ec). Pourtant, si vous ouvrez manuellement le fichier d'Excel, il n'est pas corrompu.

Il s'est avéré que pour ces fichiers, vous ne doit pas fournir le paramètre de charge corrompue. Puis il s'ouvre avec succès. Donc, à la fin, j'ai ajusté mon code à essayer d'essayer sans paramètre de charge corrompu, et seulement si cela renvoie l'exception, essayez de passer du xlrepairfile pour ce paramètre. J'ai également ajusté ma compréhension de ce paramètre pour signifier "Ouvrir et réparer ce fichier, que ce soit corrompu".


0 commentaires