Ausnahme von HRESULT: 0x800A03EC Fehler


71

Beim Ausführen des Excel-Add-Ins mit folgendem Code wird der Fehler "HRESULT: 0x800A03EC" angezeigt:

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 ein Fehler auftritt, werden X und Y auf 1 gesetzt, sodass der Excel-Bereich nicht verletzt wird. Ich habe ausgiebig gesucht und verschiedene Möglichkeiten zum Festlegen des Zellenwerts ausprobiert (z. B. Zellen [x, y], range.set_Value ()), bin aber ratlos, warum dieser Fehler auftritt und wie ich ihn vermeiden kann.

Jede Hilfe wird sehr geschätzt.

Nachfolgend finden Sie Ausnahmedetails:


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: 

3
Haben Sie eine Antwort auf dieses Problem erhalten oder gefunden?
Scifirocket

1
Dieser Fehler ist sehr "allgemein" und kann aus vielen Gründen verursacht werden. Der Grund, warum es für mich passiert ist, war das Speichern eines Kundendatentyps in C #, um sich zu übertreffen. Ich hatte diesen Fehler beim Versuch, ein Datums-Wrapper-Objekt zu speichern. Ich denke, Excel API erfordert, dass Daten vom Typ c # primitiv sind, da dies sonst zu Problemen führen kann.
stt106

Antworten:


109

Habe den gleichen Fehler in dieser Zeile

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

Gelöst mit einem Index ungleich Null

 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 hielten, eine Indizierung ungleich Null zu verwenden?


36
IMO, könnte es mit der Tatsache zusammenhängen, dass das Zellbenennungsschema von Excel tatsächlich nicht auf Null basiert ("R1C1") ...
CB

26
BASIC-Indizes ab 1. Excel hat BASIC sehr früh (in den 1980er Jahren) als Makro- / Skriptsprache aufgenommen, was später zu Visual Basic für Applikationen führte. Dies war vor der weit verbreiteten Verwendung von C-ähnlichen Sprachen mit ihrer mathematisch korrekteren nullbasierten Indizierung, die in den 90er Jahren dank Webtechnologie wie Java, Perl und Javascript allgemein verwendet wurde.
Peter Gluck

Möglicherweise wurde es für Basic-Entwickler entwickelt.
Najeeb

18

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 gefunden werden kann.

Ich erhalte diesen Fehler regelmäßig, wenn der COM-Code ausgeführt wird, während Excel beschäftigt ist. Wenn Sie beispielsweise einen Timer einstellen, der den Code startet, und der Code ausgeführt wird, während der Benutzer eine Zelle bearbeitet oder die Maustaste drückt Sie werden immer diesen Fehler erhalten. Dieser Fehler tritt nur auf, wenn der Code im Haupt-Excel-Thread ausgeführt wird, 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.


Es scheint, als ob Sie diesbezüglich richtig liegen könnten. Leider treffe ich das Problem nach einer Million und mehr Aufzeichnungen immer noch.
Anthony Mason

Wenn der Benutzer gerade mit der Bearbeitung einer Formel beschäftigt ist, kann dieser Fehler unbegrenzt bestehen bleiben.
Govert

Dies kann auch passieren, wenn der Name tatsächlich nicht gefunden wird, z. B. eine Fehlform oder ein fehlender benannter Bereich.
Zak

8

Überprüfen Sie Ihre Startindizes. Der Start erfolgt von 1 bis 0 für Microsoft.Office.Interop.Excel-Bereichsobjekte. Ich hatte den gleichen Fehler aufgrund meines Schleifenstartwerts erhalten.


4

Gehen Sie zu Excel-Optionen> Speichern> Dateien in diesem Format speichern> Wählen Sie "Excel-Arbeitsmappe (*. Xlsx)". 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.

Versuchen Sie nach dem Speichern als .xslx erneut, Ihren Code auszuführen.

bearbeiten ----

Wenn Sie sich mehr mit Ihrem Problem befassen, scheint das Problem möglicherweise länderspezifisch zu sein. Funktioniert der Code auf einem anderen Computer? Welchen Wert hat die Zelle? Ist es Datum / Uhrzeit-Format? Schauen Sie hier:

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

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


1
Vielen Dank für den Vorschlag, aber das ist nicht die Ursache. Ich arbeite in Excel2010 und die Ausnahme ist auch nach dem Speichern als "xlsx" aufgetreten. Das Seltsamste ist, dass es nicht immer passiert, sondern nur für bestimmte Datenkombinationen. Ich kann jedoch kein Muster finden, das es verursacht.
Daniil Shevelev

1
Können Sie bitte Ihren Code für ThisAddin unter Link 354 veröffentlichen? Versuchen Sie, den Wert in den Zellen zu kürzen? Sind Sie auch sicher, dass Cells [x, y] nicht bei 0 beginnt? Zellenwerte beginnen bei 1 und sind in Excel nicht Null.
Tranceporter

Ich bekomme dies, wenn ein Dateiname zu lang ist (nicht sicher, wie
hoch

4

Habe diesen Fehler auch bekommen ....

Es tritt auf, wenn das Speichern im Dateipfad ungültige Zeichen enthält, in meinem Fall:

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

Beachten Sie die Existenz von sowohl \und/

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


4

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 erstellen Sie diesen Ordner. C: \ Windows \ System32 \ config \ systemprofile \ Desktop


3

Ich weiß, dass dies alt ist, aber nur um meine Erfahrung zu verbessern. Ich bin heute Morgen darauf gestoßen. Mein Fehler hat nichts mit dem XLS-Zeilenlimit oder dem Array-Index zu tun. Es wird durch eine falsche Formel verursacht.

Ich habe ein Blatt über meine Kunden aus der Datenbank nach Excel exportiert. Jemand gibt den Kundennamen als ein =90Erickson-Kingund anscheinend ist dies als Feld vom Typ Zeichenfolge in der Datenbank in Ordnung, führt jedoch zu einem Fehler als Formel in Excel. Anstatt zu zeigen#N/A wie wenn Sie Excel verwenden, hat das Programm den 0x800A03EC-Fehler erst eine Weile später eingefroren und verschüttet.

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

Ich denke, dieser Fehlercode ist etwas zu allgemein, da die Leute eine ganze Reihe verschiedener möglicher Ursachen melden.


Ich habe gerade eine Stunde damit verbracht, diesen Fehler in einem SSIS-Paketskript zu untersuchen. Ein Feld, das nach Excel exportiert wurde, war ein Freiform-Eintrag und begann mit einem =Zeichen. Ein schneller Austausch, um alle =Schilder zu entfernen , reparierte es. Vielen Dank!
Dave Cullum

Ich vermute also, dass sie die Office-COM-Automatisierung als zugrunde liegende Methode für den Zugriff auf Excel und ihre Funktionen verwenden, da mir dies nur passiert, wenn ich COM verwende. Ich muss sagen, dass EPPlus oder NPOI einfach viel bessere Möglichkeiten sind, mit dem offenen XML-Format umzugehen.
Lionet Chen

2

Beim Exportieren einer großen Excel-Datei (~ 150.000 Zeilen) wurde der gleiche Fehler angezeigt. Dieser Fehler wurde mit dem folgenden Code behoben

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

1

Ich habe den gleichen Fehler erhalten, als ich Excel 2003-DLLs verwendet und versucht habe, in die 257. Spalte zu schreiben. Excel 2003 begrenzt die maximale Spalte pro Arbeitsblatt auf 256, wodurch diese Ausnahme ausgelöst wird.

Ausführliche Informationen zu 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)


0

Ich habe vor einiger Zeit den gleichen Fehler erhalten. Das Problem war, dass meine XLS-Datei mehr als 65531 Datensätze enthielt (um genau zu sein 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, dh 'i', diese Grenze von 65531 Datensätzen überschritt.


0

Hinzufügen eines weiteren möglichen Problems, das dies verursacht: Die Formel war falsch, weil ich das falsche Listentrennzeichen gemäß meinem Gebietsschema verwendet habe. Mit wurde CultureInfo.CurrentCulture.TextInfo.ListSeparator;das Problem behoben.

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


0

Dies muss die allgemeinste Fehlermeldung der Welt sein, da ich sie heute über den folgenden Befehl mit 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;";

Ich hoffe, es hilft, wenn jemand anders diesen Fehler hat.


0

Beim Aufrufen dieses Codes wurde folgende Fehlermeldung angezeigt: wks.Range[startCell, endCell]Der startCellBereich und der endCellBereich zeigten auf ein anderes Arbeitsblatt als die Variable wks.


0

Eine zusätzliche Ursache für diesen Fehler. Das folgende Codebeispiel gibt den Fehler zurück, wenn die Datentabelle (dtTable) einen leeren Tabellennamen hat:

  ' Open Excel workbook
  objExcelApp = New Application
  objExcelWorkbook = objExcelApp.Workbooks.Add()
  objExcelSheet = objExcelWorkbook.ActiveSheet
  objExcelSheet.Name = dtTable.TableName

0

Dieser Fehler wird 2020 immer noch angezeigt . Wie oben in stt106 angegeben , gibt es viele, viele mögliche Ursachen. In meinem Fall war es während des automatischen Einfügens von Daten in ein Arbeitsblatt, und ein Datum wurde fälschlicherweise als Jahr 1019 anstelle von 2019 eingegeben. Da ich mithilfe eines Datenarrays einfügte, war es schwierig, das Problem zu finden, bis ich zu wechselte zeilenweises Einfügen.

Dies war mein alter Code, der die Problemdaten "versteckte".

    Dim DataArray(MyDT.Rows.Count + 1, MyDT.Columns.Count + 1) As Object
    Try
        XL.Range(XL.Cells(2, 1), XL.Cells(MyDT.Rows.Count, MyDT.Columns.Count)).Value = DataArray
    Catch ex As Exception
        MsgBox("Fatal Error in F100 at 1270: " & ex.Message)
        End
    End Try

Beim Einfügen derselben Daten in einzelnen Zeilen wurde es mit demselben Fehler gestoppt, aber jetzt war es einfach, die fehlerhaften Daten zu finden.

Ich füge diese Informationen so viele Jahre später hinzu, falls dies jemand anderem hilft.


-1

Ich habe den gleichen Fehler erhalten, aber er ist jetzt sortiert. In meinem Fall hatte ich Spalten mit den Überschriften "Key1", "Key2" und "Key3". Ich habe die Spaltennamen in etwas anderes geändert und es ist sortiert.

Es scheint, dass dies reservierte Schlüsselwörter sind.

Grüße, Mahesh

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.