Formatieren von Daten in Excel mit verschiedenen regionalen Einstellungen

Aktualisiert: November 2007

Betrifft

Die Informationen in diesem Thema gelten nur für die angegebenen Visual Studio Tools for Office-Projekte und Versionen von Microsoft Office.

Projekttyp

  • Projekte auf Dokumentebene

Microsoft Office-Version

  • Excel 2003

  • Excel 2007

Weitere Informationen finden Sie unter Verfügbare Features nach Anwendung und Projekttyp.

Alle Daten mit gebietsschemaabhängigen Formatierungen, z. B. Datumsangaben und Währungen, müssen mit dem Datenformat Englisch (USA) (Gebietsschema-ID 1033) formatiert sein, bevor sie an Microsoft Office Excel übergeben oder durch Code im Visual Studio Tools for Office-Projekt ausgelesen werden.

Standardmäßig erwartet das Excel-Objektmodell durch die Visual Studio Tools for Office-Laufzeit Datenformatierungen der Gebietsschema-ID 1033 (dies wird auch als Sperren des Objektmodells auf das Gebietsschema-ID 1033 bezeichnet). Dieses Verhalten entspricht der Methode, die auch für Visual Basic for Applications (VBA) verwendet wird. Dieses Verhalten können Sie jedoch in eigenen Visual Studio Tools for Office-Projektmappen ändern.

Programmieren des gesperrten Excel-Objektmodells

Standardmäßig werden mit Visual Studio Tools for Office erstellte Anpassungen auf Dokumentebene und Add-Ins auf Anwendungsebene vom Gebietsschema des Endbenutzers nicht beeinflusst. Sie verhalten sich stets, als wäre das Gebietsschema Englisch (USA). Wenn Sie beispielsweise die Value2-Eigenschaft in Excel festlegen oder abrufen, müssen die Daten gemäß Gebietsschema-ID 1033 formatiert sein. Ein anderes Datenformat führt u. U. zu unerwarteten Ergebnissen.

Obwohl Sie für Daten, die durch verwalteten Code übergeben oder geändert werden, das Format Englisch (USA) verwenden, werden die Daten in Excel gemäß den lokalen Einstellungen des Endbenutzers interpretiert und angezeigt. Excel kann die Daten korrekt formatieren, weil der verwaltete Code zusammen mit den Daten den Gebietsschema-ID 1033 übergibt, sodass klar ist, dass die Daten das Format Englisch (USA) besitzen und entsprechend den lokalen Einstellungen des Benutzers neu formatiert werden müssen.

Ein Endbenutzer beispielsweise, der das Gebietsschema Deutsch (Deutschland) verwendet, erwartet das Datum 29. Juni 2005 im Format 29.06.2005. Wenn Ihre Projektmappe das Datum nun aber als Zeichenfolge an Excel übergibt, muss es das Format Englisch (USA) besitzen: 6/29/2005. In einer als Datumszelle formatierten Zelle wird das Datum dann im Format Deutsch (Deutschland) angezeigt.

Entsperren des Excel-Objektmodells

Visual Studio Tools for Office ermöglicht Ihnen das Entsperren des Verhaltens der Gebietsschema-ID für das gesamte Excel-Objektmodell. Das ExcelLocale1033Attribute steuert das Verhalten des Excel-Objektmodells in der Visual Studio Tools for Office-Projektmappe. Standardmäßig ist das Attribut auf true festgelegt, sodass das Excel-Objektmodell gesperrt ist und stets eine Datenformatierung nach Gebietsschema-ID 1033 erwartet wird. Wenn dieses Attribut auf true festgelegt wird, umschließt Visual Studio Tools for Office alle Excel-Objekte, die von der Lösung instanziiert werden, mit einem Proxyobjekt, das immer die Gebietsschema-ID 1033 an Excel übergibt. Wenn Sie das Attribut auf false festlegen, werden diese Proxyobjekte nicht verwendet, und das Excel-Objektmodell verwendet das Gebietsschema des Endbenutzers.

Hinweis:

Wenn Sie das Attribut auf false festlegen, weist die Projektmappe bei Endbenutzern mit einem anderen Gebietsschema als Englisch (USA) möglicherweise ein unerwartetes Verhalten auf. Sie können den Code so schreiben, dass er mit jedem Gebietsschema funktioniert. Weitere Informationen finden Sie unter Gewusst wie: Sicherstellen der richtigen regionalen Verwendung von Zeichenfolgenliteralen in Excel mithilfe der Reflektion.

Um das Objektmodell zu entsperren, legen Sie in Ihrem Projekt in der Datei AssemblyInfo.vb bzw. AssemblyInfo.cs das Attribut ExcelLocale1033Attribute auf false fest.

<Assembly: ExcelLocale1033(False)>
[assembly: ExcelLocale1033(false)]
Hinweis:

Da die Visual Studio Tools for Office-Laufzeit alle systemeigenen Excel-Objekte mit einem Proxyobjekt umschließt, wenn ExcelLocale1033Attribute den Wert true aufweist, können sich einige Vorgänge mit systemeigenen Excel-Objekten verlangsamen. In diesen Fällen können Sie die Leistung verbessern, indem Sie mithilfe der Unwrap-Methode das Excel-Objekt ohne Proxy abrufen und anschließend den Vorgang mit diesem Objekt ausführen. Beachten Sie in diesem Fall, dass das von Unwrap zurückgegebene Objekt die Gebietsschema-ID des aktuellen Threads und nicht die Gebietsschema-ID 1033 verwendet.

Entsperren von bestimmten Excel-Objekten in Excel 2003-Projekten

Beim Entwickeln von Lösungen für Excel 2003 gibt es einige Situationen, in denen Sie ein systemeigenes Excel-Objekt (d. h., eine Instanz einer im Microsoft.Office.Interop.Excel-Namespace definierten Klasse) ändern müssen, sodass statt der Gebietsschema-ID 1033 die Gebietsschema-ID des aktuellen Threads verwendet wird. Dies ist beispielsweise der Fall, wenn Sie null als out-Parameter einer Methode übergeben möchten, die zu einem Excel-Objekt gehört.

Verwenden Sie in Excel 2003-Projekten zum Ändern des Verhaltens einzelner Excel-Objekte bezüglich der Gebietsschema-ID Methoden der ExcelLocale1033Proxy-Klasse. Rufen Sie die Unwrap-Methode auf, um ein Excel-Objekt zu ändern, damit es statt der Gebietsschema-ID 1033 die Gebietsschema-ID des aktuellen Threads verwendet.

Angenommen, Sie möchten das Objekt nach dem Aufruf von Unwrap zum Ändern des Excel-Objekts mit der Gebietsschema-ID 1033 anstelle der Gebietsschema-ID des aktuellen Threads verwenden. Rufen Sie die Wrap-Methode auf, um das Excel-Objekt mit einem Proxyobjekt zu umschließen, damit es statt der Gebietsschema-ID des aktuellen Threads die Gebietsschema-ID 1033 verwendet.

Hinweis:

Die Unwrap-Methode und die Wrap-Methode sind in Visual Studio Tools for Office-Projekten für Excel 2007 veraltet. Die Visual Studio Tools for Office-Laufzeit, die für Excel 2007-Projekte verwendet wird, enthält Verbesserungen, mit denen systemeigene Excel-Objekte erwartungsgemäß funktionieren, wenn ExcelLocale1033Attribute auf true festgelegt ist. Weitere Informationen zur Visual Studio Tools for Office-Laufzeit finden Sie unter Übersicht über die Visual Studio Tools for Office-Laufzeit.

Aufrufen von Methoden mit out-Parametern, während das Excel-Objektmodell gesperrt ist

Wenn ExcelLocale1033Attribute in einer Excel 2003-Lösung auf true festgelegt ist, wird beim Übergeben von null als out-Parameter einer Methode im Excel-Objektmodell eine Ausnahme ausgelöst. Um null als out-Parameter übergeben zu können, müssen Sie vor dem Aufrufen der Methode Unwrap aufrufen und das Objekt mit der Methode übergeben.

Sie können den Parameter auch einem Wert zuweisen, bevor Sie die Methode aufrufen. Weitere Informationen zu out-Parametern finden Sie unter out (C#-Referenz).

Der folgende Code löst eine Ausnahme aus, wenn ExcelLocale1033Attribute auf true festgelegt ist. Die ExportXml-Methode weist einen out-Parameter auf.

Dim outString As String = Nothing
Dim result As Excel.XlXmlExportResult = _
    Globals.ThisWorkbook.XmlMaps(1).ExportXml(outString)
string outString = null;
Excel.XlXmlExportResult expResult =
Globals.ThisWorkbook.XmlMaps[1].ExportXml(out outString);

Um dieses Problem zu lösen, können Sie die XmlMap an die Unwrap-Methode übergeben, bevor Sie ExportXml aufrufen.

Dim outString As String = Nothing
Dim map As Excel.XmlMap = TryCast( _
    Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap( _
    Globals.ThisWorkbook.XmlMaps(1)), Excel.XmlMap)
Dim result As Excel.XlXmlExportResult = map.ExportXml(outString)
string outString = null;
Excel.XmlMap map = Microsoft.Office.Tools.Excel.
    ExcelLocale1033Proxy.Unwrap(
    Globals.ThisWorkbook.XmlMaps[1]) as Excel.XmlMap;
Excel.XlXmlExportResult expResult = map.ExportXml(out outString);

Sie können auch die outString-Variable einem Wert zuweisen, bevor Sie diese an ExportXml übergeben.

Dim outString As String = String.Empty
Dim result As Excel.XlXmlExportResult = _
    Globals.ThisWorkbook.XmlMaps(1).ExportXml(outString)
string outString = String.Empty;
Excel.XlXmlExportResult expResult =
    Globals.ThisWorkbook.XmlMaps[1].ExportXml(out outString);

Siehe auch

Aufgaben

Gewusst wie: Lokalisieren von Excel-Projektmappen

Gewusst wie: Sicherstellen der richtigen regionalen Verwendung von Zeichenfolgenliteralen in Excel mithilfe der Reflektion

Konzepte

Erstellen von Office-Projektmappen in Visual Studio

Übersicht über die Visual Studio Tools for Office-Laufzeit

Referenz

ExcelLocale1033Attribute

ExcelLocale1033Proxy

Weitere Ressourcen

Erweitern von Metadaten mithilfe von Attributen