USTERKA: Błąd „Biblioteka w starym formacie lub nieprawidłowy typ biblioteki” podczas automatyzowania programu Excel

Symptomy

Jeśli program Microsoft Excel jest automatyzowany za pomocą programu Microsoft Visual Basic .NET, Microsoft Visual C# .NET lub Microsoft Visual C++, podczas wywoływania pewnych metod może wystąpić następujący błąd:
Błąd: 0x80028018 (-2147647512)
Opis: Biblioteka w starym formacie lub nieprawidłowy typ biblioteki

Przyczyna

Błąd ten jest wyświetlany podczas wywoływania metody programu Excel, gdy są spełnione następujące warunki:
  • Metoda wymaga identyfikatora ustawień regionalnych LCID.
  • Używana jest angielskojęzyczna wersja programu Excel. W ustawieniach regionalnych komputera jest jednak skonfigurowany inny język niż angielski.
Jeśli na komputerze klienckim jest uruchomiona angielskojęzyczna wersja programu Excel, a w ustawieniach regionalnych bieżącego użytkownika jest skonfigurowany język inny niż angielski, program Excel próbuje zlokalizować pakiet językowy skonfigurowanego języka. Jeśli nie znajdzie tego pakietu językowego, zgłaszany jest błąd.

Obejście problemu

W celu obejścia tego problemu można zastosować jedną z następujących metod:
  • Zainstaluj dodatek Multilingual User Interface Pack dla danej wersji pakietu Office.
  • Wykonaj metodę lub właściwość programu Excel przy użyciu metody InvokeMember, aby móc określić klasę CultureInfo dla tego wywołania. W następującym przykładowym kodzie jest pokazane, w jaki sposób można wywołać metodę Add obiektu Workbooks z wartością „en-US” dla klasy CultureInfo:
    Dim oApp As New Excel.Application()
    oApp.Visible = True
    oApp.UserControl = True
    Dim oBooks As Object = oApp.Workbooks
    Dim ci As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("en-US")
    oBooks.GetType().InvokeMember("Add", Reflection.BindingFlags.InvokeMethod, Nothing, oBooks, Nothing, ci)
  • Innym rozwiązaniem jest ustawienie klasy CultureInfo przed wywołaniem metody programu Excel. Na przykład:
    Dim oApp As New Excel.Application()
    oApp.Visible = True
    oApp.UserControl = True
    Dim oldCI As System.Globalization.CultureInfo = _
    System.Threading.Thread.CurrentThread.CurrentCulture
    System.Threading.Thread.CurrentThread.CurrentCulture = _
    New System.Globalization.CultureInfo("en-US")
    oApp.Workbooks.Add()
    System.Threading.Thread.CurrentThread.CurrentCulture = oldCI

Z tych metod obejścia problemu na komputerze, na którym ustawienia regionalne nie pasują do bieżącej wersji pakietu Office, powinni korzystać tylko użytkownicy znający zachowanie programu Excel i sposób, w jaki interpretuje on dane, które mogą być sformatowane dla określonych ustawień regionalnych. Szczegółowe informacje na temat pisania uniwersalnych rozwiązań korzystających z programu Excel w programie Visual Studio .NET zawierają następujące artykuły w bibliotece MSDN:

Creating Office Solutions for Use in Multiple Countries/Regions Globalization and Localization Issues for Solutions Created with Microsoft Visual Studio Tools for the Microsoft Office System

Stan

Firma Microsoft potwierdziła, że jest to usterka występująca w produktach firmy Microsoft wymienionych w sekcji „Informacje zawarte w tym artykule dotyczą”.

Więcej informacji

Kroki prowadzące do odtworzenia problemu

  1. Sprawdź, czy w ustawieniach regionalnych dla komputera jest określony język inny niż angielski.

    W systemie Windows 2000:
    1. W Panelu sterowania systemu Windows kliknij dwukrotnie ikonę Opcje regionalne.
    2. Na karcie Ogólne zaznacz lokalizację, a następnie kliknij przycisk OK.
    W systemie Windows XP lub Windows Server 2003:
    1. W Panelu sterowania otwórz aplet Opcje regionalne i językowe.
    2. Na karcie Opcje regionalne wybierz ustawienia regionalne, a następnie kliknij przycisk OK.
  2. Uruchom program Microsoft Visual Studio .NET.
  3. W menu File wskaż polecenie New, a następnie kliknij polecenie Project. W oknie dialogowym New Project w obszarze Project Types kliknij opcję Visual Basic Projects. W obszarze Templates kliknij opcję Windows Application, a następnie kliknij przycisk OK. Domyślnie utworzony zostanie formularz Form1.
  4. W menu View kliknij polecenie Toolbox, a następnie dodaj przycisk do formularza Form1.
  5. Aby wyświetlić okno kodu dla formularza, kliknij dwukrotnie przycisk Button1.
  6. W oknie kodu zamień następujący kod
    Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) _
    Handles Button1.Click
    End Sub
    na kod
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim oApp As Object
    Dim oDoc As Object
    oApp = CreateObject("Excel.Application")
    oApp.Visible = True
    oDoc = oApp.Workbooks.Add
    oDoc.Close()
    oApp.Quit()
    oDoc = Nothing
    oApp = Nothing
    End Sub
  7. Dodaj następujący wiersz na początku modułu kodu Form1:
    Option Strict Off
  8. Naciśnij przycisk F5, aby skompilować i uruchomić program.
  9. Aby wygenerować błąd, kliknij przycisk Button1. Błąd występuje w wierszu zawierającym następujący fragment:
    oDoc = oApp.Workbooks.Add

Materiały referencyjne

Aby uzyskać więcej informacji dotyczących automatyzacji pakietu Office, odwiedź następującą witrynę Microsoft Office Development w sieci Web: Ponadto zobacz następujące artykuły z bazy wiedzy Microsoft Knowledge Base:
301982 Jak zautomatyzować program Microsoft Excel za pomocą programu Visual Basic .NET

302084 Jak zautomatyzować program Microsoft Excel za pomocą programu Microsoft Visual C# .NET

Właściwości

Identyfikator artykułu: 320369 — ostatni przegląd: 29.04.2008 — zmiana: 1

Opinia