If you automate Microsoft Excel with Microsoft Visual Basic
.NET, Microsoft Visual C# .NET, or Microsoft Visual C++, you may receive the
following error when calling certain methods:
Error: 0x80028018 (-2147647512) Description: Old Format
or Invalid Type Library
You receive this error calling an Excel method when the
following conditions are true:
The method requires an LCID (locale identifier).
You run an English version of Excel. However, the regional
settings for the computer are configured for a non-English language.
If the client computer runs the English version of Excel and the locale for the current user is configured for a language other
than English, Excel will try to locate the language pack for the configured
language. If the language pack is not found, the error is reported.
To work around this problem, you can use one of the following methods:
Install the Multilingual User Interface Pack for your
version of Office.
Execute the Excel method or property by using InvokeMember so that you can specify the CultureInfo for the call. For example, the following code illustrates how you
can invoke the Workbooks object Add method with "en-US" as the 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)
Or, set the CultureInfo prior to calling the Excel method. For example:
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
Create a 1033 directory under Microsoft Office\Office11. Then, copy excel.exe to the 1033 directory, and rename it as xllex.dll.
When you use one of these workarounds for a computer where
the regional settings do not match the current language version of Office, you
should be familiar with how Excel behaves and how Excel will interpret data
that might be formatted for a specific locale. For more details about writing
globalized Excel solutions with Visual Studio .NET, please see the following
articles in the MSDN:
Creating Office Solutions for Use in Multiple
Countries/Regions
Verify that the locale for the computer is set to a
language other than English.
For Windows 2000:
In Windows Control Panel, double-click Regional Options.
On the General tab, select a location, and then click OK.
For Windows XP or Windows Server 2003:
In Control Panel, open Regional
and Language Options.
On the Regional Options tab, select a
locale, and then click OK.
Start Microsoft Visual Studio .NET.
On the File menu, point to New, and then click Project. In the New Project dialog box, under Project Types, click Visual Basic Projects. Under Templates, click Windows Application, and then click OK. By default, Form1 is created.
On the View menu, click Toolbox, and then add a button to Form1.
To display the code window for the form, double-click Button1.
In the code window, replace the following code
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
End Sub
with:
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
Add the following line to the beginning of the Form1 code module:
Option Strict Off
Press F5 to build and run the program.
To generate the error, click Button1. The error occurs on the line that reads: