web-dev-qa-db-fra.com

Exception de HRESULT: erreur 0x800A03EC

J'obtiens l'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);

Lorsqu'une erreur survient, X et Y sont définis sur 1, la plage Excel n'est pas violée . ) mais je ne comprends pas pourquoi cette erreur se produit et comment l’éviter.

Toute aide est grandement appréciée.

Ci-dessous sont des détails d'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:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 354
       at ImportValidation.ThisAddIn.ReadHeaders(Hashtable columnAddress) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 123
       at ImportValidation.ThisAddIn.mapColumns() in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 493
       at ImportValidation.Ribbon1.button6_Click(Object sender, RibbonControlEventArgs e) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\Ribbon1.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: 
51
Daniil Shevelev

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 auteurs de cette bibliothèque aient pensé que c'était une bonne idée d'utiliser une indexation non nulle?

94
d1jhoni1b

Il s'agit d'une erreur COM Excel courante mais mal documentée. Je l'ai vue documentée sous la forme "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 ni le nom de la méthode.

Je reçois régulièrement cette erreur lorsque j'exécute le code COM alors qu'Excel est "occupé", par exemple si vous définissez un minuteur qui lancera le code et que le code commence à s'exécuter lorsque l'utilisateur modifie une cellule ou appuie sur son bouton de la souris, puis vous aurez toujours cette erreur. Cette erreur ne survient que lorsque le code est exécuté sur le thread Excel principal, mais semble être l'équivalent de l'erreur VBA_E_IGNORE = 0x800AC472, que vous obtenez lorsque vous appelez le modèle d'objet COM Excel à partir d'un autre thread, alors qu'Excel est "occupé".

La seule solution possible semble être de réessayer (avec un peu de retard) l'appel COM jusqu'à ce qu'il aboutisse - lorsque Excel n'est plus "occupé".

14
Govert

Vérifiez vos index de départ. Son point de départ est 1 et non 0 pour les objets de plage Microsoft.Office.Interop.Excel . J'ai reçu la même erreur en raison de ma valeur de début de boucle.

8
Emir Kuzeyli

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

S'il vous plaît faire ce dossier . C:\Windows\SysWOW64\config\systemprofile\Desktop · Windows 2008 Server x86
S'il vous plaît faire ce dossier . C:\Windows\System32\config\systemprofile\Desktop

4
ronguest

Vous avez 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";

Notez l'existence de \ et /

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

3
kingPuppy

Accédez à Options Excel> Enregistrer> Enregistrer les fichiers au 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 n'autorise pas plus de 65 000 lignes dans la feuille Excel.

Une fois que vous avez enregistré en tant que .xslx, essayez à nouveau d’exécuter votre code.

modifier ----

En regardant de plus près dans votre problème, il semble que le problème pourrait être spécifique aux paramètres régionaux. Le code fonctionne-t-il sur une autre machine? Quelle est la valeur de la cellule? Est-ce le format date/heure? Regardez ici:

http://support.Microsoft.com/kb/320369

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

3
tranceporter

A obtenu la même erreur lorsque vous avez essayé d'exporter un fichier Excel volumineux (~ 150 000 lignes) Corrigé avec le code suivant

Application xlApp = new Application();
xlApp.DefaultSaveFormat = XlFileFormat.xlOpenXMLWorkbook;
2
SuperCuke

J'ai eu la même erreur en utilisant les DLL Excel 2003 et en essayant d'écrire dans la 257ème colonne. Excel 2003 limite le nombre maximal de colonnes par feuille de calcul à 256, générant ainsi cette exception.

Pour connaître 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 limite de colonne est augmentée à 16384 colonnes, voir http://office.Microsoft.com/en-001/Excel-help/Excel-specifications-and-limits-HP010073849.aspx

1
schlingel

Je sais que c'est vieux mais juste pour ajouter mon expérience. Je viens de le rencontrer ce matin. Notre erreur n’a rien à voir avec la limite de ligne .xls ou l’index de tableau. Cela est dû à une formule incorrecte.

J'exportais de la base de données vers Excel une fiche de mes clients. Quelqu'un renseigne le nom du client sous la forme =90Erickson-King et, apparemment, il s’agit bien d’un champ de type chaîne dans la base de données. Toutefois, une erreur sera générée sous forme de formule dans Excel. Au lieu d’afficher #N/A comme lorsque vous utilisez Excel, le programme vient de geler et de répandre cette erreur 0x800A03EC un peu plus tard.

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

J'imagine que ce code d'erreur est un peu trop général, vu que les gens signalent toute une gamme de causes possibles.

1
Lionet Chen

Je vois qu'il s'agit d'un ancien message, mais je l'ai trouvé en essayant de résoudre la même erreur et je voulais partager ma solution. Il s'est avéré que, lors d'une tentative d'exportation vers Excel, il y avait un "=" au début d'un commentaire dans une cellule. Exemple "= bloqué" alors que le commentaire aurait dû juste dire "bloqué". Je suppose que Excel pensait que c'était une formule. 

1
CMB

Je recevais la même erreur il y a quelque temps. Le problème était que mon fichier XLS contenait plus de 65 531 enregistrements (500 000 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», dépassait cette limite de 65 531 enregistrements.

0
Utsav Jha

Ajoutant un autre problème possible causant ceci: la formule était fausse parce que j'utilisais le mauvais séparateur de liste en fonction de mes paramètres régionaux. L'utilisation de CultureInfo.CurrentCulture.TextInfo.ListSeparator; a corrigé le problème. 

Notez que l'exception a été levée sur la ligne de code suivante ...

0
gooopil

Ce doit être le message d'erreur le plus générique au monde car je l'ai aujourd'hui avec la commande suivante utilisant Excel Interop:

Excel.WorkbookConnection conn;
conn.ODBCConnection.Connection = "DSN=myserver;";

Ce qui a été corrigé, c'était en spécifiant ODBC dans la chaîne de connexion:

conn.ODBCConnection.Connection = "ODBC;DSN=myserver;";

À tout hasard, si quelqu'un d'autre a cette erreur, j'espère que cela aidera.

0
Hambone