Exception de HRESULT: erreur 0x800A03EC

Je reçois une erreur "HRESULT: 0x800A03EC" lors de l'exécution du complément Excel avec le code suivant:

Excel.Range rng = ActiveSheet.Cells[x, y] as Excel.Range;                
string before = rng.Value2; 
string cleanV = System.Text.RegularExpressions.Regex.Replace(before, @"s+", "");
rng.set_Value(cleanV);

Lorsque l'erreur se produit, X et Y sont définis sur 1, la plage Excel n'est donc pas violée. J'ai beaucoup cherché et essayé un certain nombre de façons de définir la valeur de la cellule (par exemple. Cellules [x, y], gamme.set_Value ()) mais je suis à la perte pourquoi cette erreur se produit et comment l'éviter.

Toute aide est grandement appréciée.

Voici les détails de l'exception:


System.Runtime.InteropServices.COMException was unhandled by user code
  HResult=-2146827284
  Message=Exception from HRESULT: 0x800A03EC
  Source=""
  ErrorCode=-2146827284
  StackTrace:
       at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
       at Microsoft.Office.Interop.Excel.Range.set_Value(Object RangeValueDataType, Object value)
       at ImportValidation.ThisAddIn.removeAnySpaces(Int32 x, Int32 y) in c:UsersdshevelevDocumentsVisual Studio 2012ProjectsImportValidationImportValidationThisAddIn.cs:line 354
       at ImportValidation.ThisAddIn.ReadHeaders(Hashtable columnAddress) in c:UsersdshevelevDocumentsVisual Studio 2012ProjectsImportValidationImportValidationThisAddIn.cs:line 123
       at ImportValidation.ThisAddIn.mapColumns() in c:UsersdshevelevDocumentsVisual Studio 2012ProjectsImportValidationImportValidationThisAddIn.cs:line 493
       at ImportValidation.Ribbon1.button6_Click(Object sender, RibbonControlEventArgs e) in c:UsersdshevelevDocumentsVisual Studio 2012ProjectsImportValidationImportValidationRibbon1.cs:line 55
       at Microsoft.Office.Tools.Ribbon.RibbonPropertyStorage.ControlActionRaise(IRibbonControl control)
       at Microsoft.Office.Tools.Ribbon.RibbonPropertyStorage.ButtonClickCallback(RibbonComponentImpl component, Object[] args)
       at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.Invoke(RibbonComponentCallback callback, Object[] args)
       at Microsoft.Office.Tools.Ribbon.RibbonMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.System.Reflection.IReflect.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters)
  InnerException: 
49
demandé sur Daniil Shevelev 2012-10-03 22:31:06

11 réponses

A la même erreur dans cette ligne

 Object temp = range.Cells[i][0].Value;

Résolu avec un index non nul

 Object temp = range.Cells[i][1].Value;

Comment est-il possible que les gars qui ont créé cette bibliothèque aient pensé que c'était une bonne idée d'utiliser une indexation non nulle?

91
répondu d1jhoni1b 2013-09-27 22:08:26

C'est une erreur com Excel commune mais mal documentée. Je l'ai vu documenté comme "NAME_NOT_FOUND", ce qui signifie que la couche com D'Excel est désactivée et ne peut pas trouver la propriété COM ou le nom de la méthode.

Je reçois cette erreur systématiquement lors de l'exécution du code COM alors Qu'Excel est "occupé", par exemple si vous définissez une minuterie qui va démarrer le code, et le code commence à fonctionner pendant que L'utilisateur édite une cellule ou appuie sur le bouton de la souris, alors vous aurez toujours cette erreur. Cette erreur seulement se produit lorsque le code s'exécute sur le thread Excel principal, mais semble être l'équivalent de l'erreur vba_e_ignore = 0x800AC472, que vous obtenez en appelant le modèle D'objet Excel COM à partir d'un autre thread, alors Qu'Excel est 'occupé'.

La seule solution de contournement semble être de réessayer (avec un petit retard) L'appel COM jusqu'à ce qu'il réussisse - quand Excel n'est plus 'occupé'.

14
répondu Govert 2012-10-15 10:29:07

Vérifiez vos index de démarrage. Son départ de 1 pas 0 pour Microsoft.Bureau.Interop.Objets de plage Excel. J'avais reçu la même erreur à cause de ma valeur de début de boucle.

8
répondu Emir Kuzeyli 2012-10-15 10:12:24

Allez dans Options Excel > Enregistrer > Enregistrer les fichiers dans ce format > sélectionnez " classeur Excel (*.xlsx)". Ce problème se produit si vous utilisez une ancienne version du fichier excel (.xls) au lieu de .xlsx. L'ancienne version ne permet pas plus de 65k lignes dans la feuille excel.

Une fois que vous avez enregistré sous .xslx, essayez à nouveau d'exécuter votre code.

Modifier - - - -

En regardant plus dans votre problème, il semble que le problème puisse être spécifique aux paramètres régionaux. Le code fonctionne-t-il sur une autre machine? Quel la valeur de la cellule? Est-ce le format datetime? Jetez un oeil ici:

Http://support.microsoft.com/kb/320369

Http://blogs.msdn.com/b/eric_carter/archive/2005/06/15/429515.aspx

3
répondu tranceporter 2012-10-03 18:52:35

J'ai aussi cette erreur....

Cela se produit lorsque save to filepath contient des caractères non valides, dans mon cas:

path = "C:/somefolder/anotherfolder\file.xls";

Remarque l'existence de deux \ et /

*peut également se produire si vous essayez d'enregistrer dans un répertoire qui n'existe pas déjà.

3
répondu kingPuppy 2014-07-08 15:37:23

Nous avons eu le même problème et avons trouvé pour nous la solution:

Veuillez créer ce dossier. C:\Windows\SysWOW64\config\systemprofile\Desktop ·Windows 2008 Server x86
Merci de faire de ce dossier. C:\Windows\System32\config\systemprofile\Desktop

3
répondu ronguest 2015-04-27 10:17:02

A la même erreur lorsque vous essayez d'exporter un grand fichier Excel (~150.000 lignes) Corrigé avec le code suivant

Application xlApp = new Application();
xlApp.DefaultSaveFormat = XlFileFormat.xlOpenXMLWorkbook;
2
répondu SuperCuke 2014-07-04 07:08:17

J'ai eu la même erreur en utilisant des dll Excel 2003 et en essayant d'écrire dans la 257e colonne. Excel 2003 limite la colonne maximale par feuille de calcul à 256, soulevant ainsi cette exception.

Pour les limitations détaillées D'Excel 2003, voir http://office.microsoft.com/en-001/excel-help/excel-specifications-and-limits-HP005199291.aspx

À partir D'Excel 2007, la limitation des colonnes est portée à 16384 colonnes, voir http://office.microsoft.com/en-001/excel-help/excel-specifications-and-limits-HP010073849.aspx

1
répondu schlingel 2014-01-31 08:30:21

Je sais que c'est vieux mais juste pour pitcher dans mon expérience. Je viens de tomber sur ça ce matin. Tourne notre mon erreur n'a rien à voir avec .limite de ligne xls ou index de tableau. Il est causé par une formule incorrecte.

J'exportais de la base de données vers Excel une feuille sur mes clients. Quelqu'un remplit le nom du client comme =90Erickson-King et apparemment c'est bien comme un champ de type chaîne dans la base de données, mais entraînera une erreur en tant que formule dans Excel. Au lieu d'afficher #N/A comme lorsque vous utilisez Excel, le programme a juste gelé et renversé cette erreur 0x800A03EC un peu plus tard.

J'ai corrigé cela en supprimant le signe égal et le tiret au nom du client. Après cela, l'exportation s'est bien passée.

Je suppose que ce code d'erreur est un peu trop général car les gens sont vus signalant une gamme de causes possibles différentes.

1
répondu Lionet Chen 2018-06-07 02:00:44

Je vois que c'est un ancien post mais je l'ai rencontré en essayant de résoudre la même erreur et je voulais partager ma solution. Comme il s'avère, tout en essayant d'exporter vers excel, il y avait un "=" au début d'un commentaire dans une cellule. Exemple "= stuck "quand le commentaire aurait dû juste dire "stuck". Je suppose qu'excel pensait que c'était une formule.

1
répondu CMB 2018-07-05 14:38:18

Je recevais la même erreur il y a quelque temps. Le problème était que mon fichier XLS contenait plus de 65531 enregistrements(500 mille pour être précis). J'essayais de lire une série de cellules.

Excel.Range rng = (Excel.Range) myExcelWorkbookObj.UsedRange.Rows[i];

L'exception a été levée en essayant de lire la plage de cellules lorsque mon compteur, c'est-à-dire 'i', a dépassé cette limite de 65531 enregistrements.

0
répondu Utsav Jha 2018-04-10 06:53:24