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:
Antworten:
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?
quelle
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.
quelle
Ü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.
quelle
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
quelle
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.
quelle
Wir hatten das gleiche Problem und fanden für uns die Lösung:
quelle
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-King
und 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.
quelle
=
Zeichen. Ein schneller Austausch, um alle=
Schilder zu entfernen , reparierte es. Vielen Dank!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;
quelle
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)
quelle
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.
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.
quelle
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 ...
quelle
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.
quelle
Beim Aufrufen dieses Codes wurde folgende Fehlermeldung angezeigt:
wks.Range[startCell, endCell]
DerstartCell
Bereich und derendCell
Bereich zeigten auf ein anderes Arbeitsblatt als die Variablewks
.quelle
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
quelle
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.
quelle
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
quelle