web-dev-qa-db-ger.com

Ausnahme von HRESULT: 0x800A03EC Fehler

Ich erhalte die Fehlermeldung "HRESULT: 0x800A03EC", wenn Sie das Excel-Add-In mit folgendem Code ausführen:

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);

Wenn der Fehler X und Y auf 1 gesetzt wird, wird der Excel-Bereich nicht verletzt. Ich habe ausführlich gesucht und versucht, den Zellenwert auf verschiedene Weise festzulegen (z. B. Zellen [x, y], range.set_Value () ) bin aber ratlos, warum dieser Fehler auftritt und wie er vermieden werden kann.

Jede Hilfe wird sehr geschätzt.

Nachfolgend sind Ausnahmedetails aufgeführt:


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

Ich habe in dieser Zeile den gleichen Fehler

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

Gelöst mit einem nicht auf null basierenden Index

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

Wie ist es möglich, dass die Leute, die diese Bibliothek erstellt haben, es für eine gute Idee halten, eine Indexierung auf Basis von Nicht-Null zu verwenden?

94
d1jhoni1b

Dies ist ein häufiger, aber schlecht dokumentierter Excel COM-Fehler. Ich habe gesehen, dass es als "NAME_NOT_FOUND" dokumentiert ist, was bedeutet, dass die COM-Ebene von Excel deaktiviert ist und die COM-Eigenschaft oder den Methodennamen nicht finden kann.

Ich erhalte diesen Fehler konstant, wenn der COM-Code ausgeführt wird, während Excel "beschäftigt" ist. Wenn Sie beispielsweise einen Zeitgeber einstellen, der den Code startet, wird der Code ausgeführt, während der Benutzer eine Zelle bearbeitet oder die Maustaste drückt Sie erhalten immer diesen Fehler. Dieser Fehler tritt nur dann auf, wenn der Code im Haupt-Excel-Thread ausgeführt wird. Er scheint jedoch dem Fehler VBA_E_IGNORE = 0x800AC472 zu entsprechen, den Sie erhalten, wenn Sie das Excel-COM-Objektmodell von einem anderen Thread aus aufrufen, während Excel 'beschäftigt' ist.

Die einzige Problemumgehung scheint darin zu bestehen, den COM-Aufruf (mit einer kleinen Verzögerung) erneut zu versuchen, bis er erfolgreich ist - wenn Excel nicht mehr "beschäftigt" ist.

14
Govert

Überprüfen Sie Ihre Startindizes. Sein Start von 1 nicht 0 für Microsoft.Office.Interop.Excel-Bereichsobjekte . Ich hatte denselben Fehler aufgrund meines Schleifenstartwerts.

8
Emir Kuzeyli

Wir hatten das gleiche Problem und fanden für uns die Lösung:

Bitte machen Sie diesen Ordner . C:\Windows\SysWOW64\config\systemprofile\Desktop · Windows 2008 Server x86
Bitte machen Sie diesen Ordner . C:\Windows\System32\config\systemprofile\Desktop

4
ronguest

Bekam diesen Fehler auch ....

es tritt auf, wenn das Speichern in Dateipfad ungültige Zeichen enthält. In meinem Fall:

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

Beachten Sie, dass sowohl \ als auch / vorhanden sind.

* Kann auch auftreten, wenn versucht wird, ein Verzeichnis zu speichern, das noch nicht vorhanden ist.

3
kingPuppy

Gehen Sie zu Excel-Optionen> Speichern> Dateien in diesem Format speichern. Wählen Sie "Excel Workbook (*. Xlsx)" aus. Dieses Problem tritt auf, wenn Sie eine ältere Version der Excel-Datei (.xls) anstelle von .xlsx verwenden Die ältere Version erlaubt nicht mehr als 65.000 Zeilen in der Excel-Tabelle.

Wenn Sie als .xslx gespeichert haben, führen Sie den Code erneut aus.

bearbeiten ----

Wenn Sie sich Ihr Problem genauer ansehen, scheint es, dass das Problem länderspezifisch ist. Funktioniert der Code auf einem anderen Computer? Welchen Wert hat die Zelle? Ist es ein datetime-Format? Schauen Sie sich hier an:

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

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

3
tranceporter

Beim Versuch, eine große Excel-Datei (~ 150.000 Zeilen) zu exportieren, wurde der gleiche Fehler ausgegeben

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

Ich habe die gleiche Fehlermeldung erhalten, als ich Excel 2003-DLLs verwendete und versuchte, in die 257. Spalte zu schreiben. Excel 2003 begrenzt die maximale Spalte pro Arbeitsblatt auf 256, wodurch diese Ausnahme ausgelöst wird.

Ausführliche Einschränkungen von Excel 2003 finden Sie unter http://office.Microsoft.com/en-001/Excel-help/Excel-specifications-and-limits-HP005199291.aspx

Ab Excel 2007 wird die Spaltenbeschränkung auf 16384 Spalten erhöht. Siehe http://office.Microsoft.com/en-001/Excel-help/Excel-specifications-and-limits-HP010073849.aspx

1
schlingel

Ich weiß, das ist alt, aber nur um meine Erfahrung zu verbessern. Ich habe es heute morgen gerade reingelegt. Umgekehrt hat mein Fehler nichts mit dem Zeilenlimit .xls oder dem Array-Index zu tun. Ursache ist eine falsche Formel.

Ich habe ein Datenblatt über meine Kunden von der Datenbank nach Excel exportiert. Jemand trägt den Kundennamen als =90Erickson-King ein und anscheinend ist dies als String-Typ-Feld in der Datenbank in Ordnung. In Excel wird jedoch ein Fehler als Formel angezeigt. Anstatt #N/A wie bei der Verwendung von Excel anzuzeigen, hat das Programm den 0x800A03EC-Fehler eine Weile später eingefroren und verschüttet.

Ich habe dies korrigiert, indem das Gleichheitszeichen und der Bindestrich im Namen des Kunden gelöscht wurden. Danach ging der Export gut.

Ich denke, dieser Fehlercode ist ein bisschen zu allgemein, da man sieht, dass viele verschiedene mögliche Ursachen gemeldet werden.

1
Lionet Chen

Ich sehe, dass dies ein alter Beitrag ist, aber ich bin auf ihn gestoßen, als ich versuchte, den gleichen Fehler zu beheben, und wollte meine Lösung teilen. Es stellte sich heraus, dass beim Versuch, nach Excel zu exportieren, ein "=" am Anfang eines Kommentars in einer Zelle stand. Beispiel "= stecken", wenn der Kommentar gerade "stecken" hätte sagen sollen. Ich denke, Excel dachte, es wäre eine Formel. 

1
CMB

Ich habe vor einiger Zeit den gleichen Fehler erhalten. Das Problem war, dass meine XLS-Datei mehr als 65531 Datensätze enthielt (genau 500.000). Ich habe versucht, eine Reihe von Zellen zu lesen.

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

Die Ausnahme wurde ausgelöst, als versucht wurde, den Zellbereich zu lesen, als mein Zähler, d. H. "I", diesen Grenzwert von 65531 Datensätzen überschritt.

0
Utsav Jha

Ein weiteres mögliches Problem, das zu diesem Problem führte, wurde hinzugefügt: Die Formel war falsch, da ich das falsche Listentrennzeichen entsprechend meinem Gebietsschema verwendete. Mit CultureInfo.CurrentCulture.TextInfo.ListSeparator; wurde das Problem behoben. 

Beachten Sie, dass die Ausnahme in der folgenden Codezeile ausgelöst wurde ...

0
gooopil

Dies muss die allgemeinste Fehlermeldung der Welt sein, da ich sie heute mit dem folgenden Befehl unter Verwendung von Excel Interop erhalten habe:

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

Was behoben wurde, war die Angabe von ODBC in der Verbindungszeichenfolge:

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

Zufälligerweise hat jeder andere diesen Fehler, ich hoffe, es hilft.

0
Hambone