web-dev-qa-db-de.com

Excel-Fehler HRESULT: 0x800A03EC beim Versuch, den Bereich mit dem Zellennamen abzurufen

Ich arbeite mit dem Window Service-Projekt. die Daten in einer Reihenfolge in ein Blatt in Excel-Datei schreiben müssen.

Aber manchmal, nur manchmal, wirft der Dienst die Ausnahme "Ausnahme von HRESULT: 0x800A03EC" aus, während versucht wird, den Namen der Zelle zu ermitteln.

Ich habe den Code zum Öffnen der Excel-Tabelle eingefügt und hier Zelle abgerufen.

  • Betriebssystem: Windows Server 2003 Office:
  • Microsoft Office 2003 SP2

1: Excel-Arbeitsblatt öffnen

m_WorkBook = m_WorkBooks.Open(this.FilePath, 0, false, 5,
     "", "", true, Excels.XlPlatform.xlWindows, ";",
     true, false, 0, true, 0, 0);

2: Zelle zum Schreiben bringen

protected object m_MissingValue = System.Reflection.Missing.Value;
Range range = m_WorkSheet.get_Range(cell.CellName, m_MissingValue);
// error from this method, and cell name is string.
16
Teerasej

Der Fehlercode 0x800A03EC (oder -2146827284) bedeutet NAME_NOT_FOUND; Mit anderen Worten, Sie haben nach etwas gefragt und Excel kann es nicht finden. 

Dies ist ein generischer Code, der für viele Dinge gelten kann, die er nicht finden kann, z. Wenn Sie Eigenschaften verwenden, die zu diesem Zeitpunkt nicht gültig sind, wie PivotItem.SourceNameStandard, wird dies ausgelöst, wenn auf ein PivotItem kein Filter angewendet wird. Worksheets["BLAHBLAH"] wirft dies aus, wenn das Blatt nicht existiert usw. Im Allgemeinen fragen Sie nach etwas mit einem bestimmten Namen und es existiert nicht. Und warum, das erfordert etwas Graben von Ihrer Seite.

Vergewissern Sie sich, dass Ihr Blatt auf jeden Fall den gewünschten Bereich hat, oder dass der .CellName den Namen des gewünschten Bereichs definitiv zurückgibt.

17

Ich bin auf diesen Fehler gestoßen, weil ich versuchte, eine Zeichenfolge in eine Zelle zu schreiben, die mit einem "=" begann. 

Die Lösung bestand darin, ein "'" (Apostroph) vor das Gleichheitszeichen zu setzen. Dies ist eine Möglichkeit, Excel mitzuteilen, dass Sie nicht tatsächlich versuchen, eine Formel zu schreiben, sondern nur das Gleichheitszeichen drucken möchten.

4
ebrts

Ich habe hier eine mögliche Lösung gefunden: http://www.made4dotnet.com/Default.aspx?tabid=141&aid=15

Bearbeiten:

Wenn Sie Microsoft Excel mit Microsoft Visual Basic .NET, Microsoft Visual C # .NET oder Microsoft Visual C++ automatisieren, werden beim Aufrufen bestimmter Methoden möglicherweise die folgenden Fehler angezeigt, da für das Gebietsschema ein anderes als US-Englisch (Gebietsschema-ID oder LCID 1033):

Ausnahme von HRESULT: 0x800A03EC 

und/oder

Altes Format oder ungültige Typbibliothek

LÖSUNG 1:


Um diesen Fehler zu umgehen, können Sie CurrentCulture auf en-US setzen, wenn Sie Code ausführen, der sich auf Excel bezieht, und mit diesen beiden Funktionen auf originale zurücksetzen.

//declare a variable to hold the CurrentCulture
System.Globalization.CultureInfo oldCI;
//get the old CurrenCulture and set the new, en-US
void SetNewCurrentCulture()
{
  oldCI = System.Threading.Thread.CurrentThread.CurrentCulture;
  System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
}
//reset Current Culture back to the originale
void ResetCurrentCulture()
{
  System.Threading.Thread.CurrentThread.CurrentCulture = oldCI;
}

LÖSUNG 2:


Eine andere Lösung, die funktionieren könnte, erstellen Sie ein 1033-Verzeichnis unter Microsoft Office\Office11 (oder Ihrer entsprechenden Office-Version), kopieren Sie Excel.exe in das 1033-Verzeichnis und benennen Sie es in xllex.dll um.

Obwohl Sie das Problem möglicherweise mithilfe einer dieser Lösungen lösen, kann das Excel-Objektmodell beim Aufruf des Excel-Objektmodells in anderen Gebietsschemata als US-Englisch anders aussehen und Ihr Code kann auf eine Weise fehlschlagen, an die Sie möglicherweise nicht gedacht haben. Möglicherweise verfügen Sie über Code, der den Wert eines Bereichs auf ein Datum setzt:

yourRange.Value2 = "10/10/09"

Abhängig von der Ländereinstellung kann dieser Code unterschiedlich aussehen und dazu führen, dass Excel einen der folgenden Werte in den Bereich setzt:

10. Oktober 2009 10. Oktober 2009 9. Oktober 2010

3
Ole

Die Bedeutung des vollständig undokumentierten Fehlers 800A03EC (schade bei Microsoft!) Ist so etwas wie "OPERATION NOT SUPPORTED".

Es kann passieren 

  • wenn Sie ein Dokument öffnen, dessen Inhalt mit einer neueren Excel-Version erstellt wurde, kann Ihre aktuelle Excel-Version nicht verstehen.
  • wenn Sie ein Dokument unter demselben Pfad speichern, von dem Sie es geladen haben (Datei ist bereits geöffnet und gesperrt)

Meistens wird dieser Fehler jedoch aufgrund schwerwiegender Fehler in Excel angezeigt.

  • Zum Beispiel hat Microsoft.Office.Interop.Excel.Picture die Eigenschaft "Enabled". Wenn Sie es aufrufen, sollten Sie einen bool-Wert erhalten. Stattdessen erhalten Sie einen Fehler 800A03EC. Das ist ein Fehler.
  • Und in Exel 2013 und 2016 gibt es einen sehr fetten Fehler: Wenn Sie einen Excel-Prozess automatisieren und Application.Visible=true und Application.WindowState = XlWindowState.xlMinimized festlegen, erhalten Sie Hunderte von 800A03EC-Fehlern aus verschiedenen Funktionen (wie Range.Merge (), CheckBox.Text, Shape.TopLeftCell) , Shape.Locked und viele mehr). Dieser Fehler ist in Excel 2007 und 2010 nicht vorhanden.
3
Elmue

Ich habe den Fehler mit einem Leerzeichen in einem Blattnamen erhalten:

using (var range = _excelApp.Range["Sheet Name Had Space!$A$1"].WithComCleanup())

Ich habe das Problem behoben, indem Sie Anführungszeichen mit Leerzeichen in einfache Anführungszeichen setzen:

using (var range = _excelApp.Range["'Sheet Name Had Space'!$A$1"].WithComCleanup())
3
Jeremy Thompson

Ich hatte dieses Problem, als ich versuchte, die Funktion range.AddComment () zu verwenden. Ich konnte dieses Problem durch Aufrufen von range.ClearComment () lösen, bevor der Kommentar hinzugefügt wurde.

1
Jay

Ich bekam das, als ich vergessen hatte, Arbeitsmappe oder Arbeitsblatt aufzuheben.

0
Makatun

Mit der Antwort von Dominic fand ich, dass die Antwort auf mein Problem speziell ein ungültiges DateTiime in den Quelldaten war, bevor es auf den Bereich angewendet wurde. Irgendwo zwischen der Datenbank, .NET und Excel war die Konvertierung des Datums auf "1/1/1899 12:00:00 AM" voreingestellt. Ich musste es überprüfen und in eine leere Zeichenfolge umwandeln, was es für mich reparierte.

if (objectArray[row, col].ToString() == "1/1/1899 12:00:00 AM")
{
    objectArray[row, col] = string.Empty;
}

Dies ist wahrscheinlich ein ziemlich spezifisches Beispiel, aber es wird hoffentlich jemandem etwas Zeit ersparen, wenn er versucht, ungültige Daten aufzuspüren.

0
aaron

Ich bin auf einen ähnlichen Fehler beim Ausführen von Excel in VBA gestoßen. Ich habe gelernt, dass, wenn ich Daten aus MSSQL abrufe und dann get_range und .Value2 apply verwendet wird, dieser außerhalb des Bereichs liegt. Jeder Wert, der den Typ uniqueidentifier (GUID) hatte, führte dazu dieser Fehler. Nur wenn ich den Wert in nvarcahr(max) umwandle, hat es funktioniert.

0
Idan Youval

Dieser Fehlercode ist beim Auflisten von Namen und beim Aufrufen von workheet.get_Range (Name) aufgetreten. Es scheint vorzukommen, wenn der Name NICHT für einen Bereich gilt, in meinem Fall ist dies der Name eines Makros.

0
Jay