ПОМИЛКА: помилка "Старий формат або бібліотека неприпустимого типу" під час автоматизації Excel

Ознаки

Якщо автоматизувати Microsoft Excel за допомогою Microsoft Visual Basic .NET, Microsoft Visual C# .NET або Microsoft Visual C++, під час виклику певних методів може виникати така помилка:

Примітка.

Помилка: 0x80028018 (-2147647512)
Опис: бібліотека старого формату або неприпустимого типу

Причина

Ця помилка виникає під час виклику методу Excel за таких умов:

  • Для методу потрібен LCID (ідентифікатор мови).

  • Ви використовуєте англомовну версію Excel. Проте регіональні параметри комп'ютера настроєно для іншої мови.

Якщо на клієнтському комп'ютері використовується англійська версія Excel, а для поточного користувача настроєно мову, відмінну від англійської, Excel спробує знайти мовний пакет для вибраної мови. Якщо мовний пакет не знайдено, відображається повідомлення про помилку.

Спосіб вирішення

Щоб вирішити цю проблему, скористайтесь одним із наведених нижче способів.

  • Інсталюйте багатомовний пакет для свого випуску Office.

  • Виконайте метод або властивість Excel за допомогою InvokeMember, щоб можна було вказати CultureInfo для виклику. Наприклад, наступний код ілюструє, як ви можете викликати об'єкт Workbooks Add method з "en-US" як 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)
    
    
  • Або встановіть CultureInfo перед викликом методу Excel. Наприклад:

    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
    
  • Створіть каталог 1033 у Microsoft Office\Office11. Потім скопіюйте excel.exe до каталогу 1033 та перейменуйте його на xllex.dll.

     Щоб дізнатися більше, перейдіть за цим посиланням:
    http://blogs.msdn.com/eric_carter/archive/2005/06/15/429515.aspx

Якщо ви використовуєте один із цих способів вирішення для комп'ютера, на якому регіональні параметри не відповідають поточній мовній версії Office, ви маєте знати, як Excel поводиться та інтерпретує дані, відформатовані для певної мови. Докладні відомості про написання глобалізованих рішень Excel за допомогою Visual Studio .NET див. в наступних статтях.

Стан

Корпорація Майкрософт підтвердила, що це помилка в продуктах Microsoft, перелічених у розділі "Застосовується до".

Додаткові відомості

Кроки для відтворення поведінки

  1. Переконайтеся, що мовні параметри комп'ютера відмінні від англійської.

    У Windows 2000:

    1. У Windows Панель керування двічі клацніть елемент "Регіональні параметри".
    2. На вкладці "Загальні" виберіть розташування та натисніть кнопку "OK".

    Для Windows XP або Windows ServerWindows Server 2003:

    1. In Control PanelПанель керування, відкрийте пункт "Мова та регіональні параметри".
    2. На вкладці "Регіональні параметри" виберіть локалізацію та натисніть кнопку "OK".
  2. Запустіть Microsoft Visual Studio .NET.

  3. У меню "Файл" наведіть вказівник миші на пункт "Створити" та виберіть пункт "Проект". У діалоговому вікні "Новий проект" у розділі "Типи проектів" виберіть пункт "Проекти Visual Basic". У розділі Шаблони виберіть пункт Програма Windows, а потім натисніть кнопку OK. За промовчанням буде створено форму1.

  4. У меню "Вигляд" виберіть пункт "Панель інструментів" і додайте кнопку до форми 1.

  5. Щоб відобразити вікно коду для форми, двічі клацніть кнопку1.

  6. У вікні коду замініть такий код

    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) _
                              Handles Button1.Click
    End Sub
    
    

    за допомогою:

    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. Додайте наступний рядок на початок модуля коду Form1:

    Option Strict Off
    
  8. Натисніть клавішу F5, щоб зібрати та запустити програму.

  9. Щоб згенерувати повідомлення про помилку, натисніть клавішу Button1. Помилка виникає в рядку з таким текстом:

    oDoc = oApp.Workbooks.Add
    
    

Посилання

Щоб отримати додаткові відомості про автоматизацію Office, відвідайте такий веб-сайт розробки Microsoft Office:

http://support.microsoft.com/ofd Крім того, ознайомтеся з такими статтями бази знань Microsoft:

301982 Автоматизація Microsoft Excel за допомогою Visual Basic .NET

302084 Автоматизація Microsoft Excel з Microsoft Visual C# .NET