症状
如果使用 Microsoft Visual Basic .NET、Microsoft Visual C# .NET 或 Microsoft Visual C++ 自动Microsoft Excel,则调用某些方法时可能会收到以下错误:
错误:0x80028018 (-2147647512) 说明:旧格式或类型库无效
原因
如果满足以下条件,则调用 Excel 方法时收到此错误:
-
方法需要 LCID (区域设置标识符) 。
-
运行英语版本的 Excel。 但是,计算机的区域设置配置为非英语语言。
如果客户端计算机运行英语版本的 Excel,并且当前用户的区域设置配置为英语以外的语言,Excel 将尝试查找所配置语言的语言包。 如果未找到语言包,则会报告错误。
解决方法
若要解决此问题,可以使用以下方法之一:
-
为 Office 版本安装多语言用户界面包。
-
使用 InvokeMember 执行 Excel 方法或属性,以便可以为调用指定 CultureInfo。 例如,以下代码演示了如何将“en-US”作为 CultureInfo 调用 Workbooks 对象 Add 方法:
Dim oApp As New Excel.Application()oApp.Visible = TrueoApp.UserControl = TrueDim oBooks As Object = oApp.WorkbooksDim ci As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("en-US")oBooks.GetType().InvokeMember("Add", Reflection.BindingFlags.InvokeMethod, Nothing, oBooks, Nothing, ci)
-
或者,在调用 Excel 方法之前设置 CultureInfo。 例如:
Dim oApp As New Excel.Application()oApp.Visible = TrueoApp.UserControl = TrueDim oldCI As System.Globalization.CultureInfo = _ System.Threading.Thread.CurrentThread.CurrentCultureSystem.Threading.Thread.CurrentThread.CurrentCulture = _ New System.Globalization.CultureInfo("en-US")oApp.Workbooks.Add()System.Threading.Thread.CurrentThread.CurrentCulture = oldCI
-
在 Microsoft Office\Office11 下创建一个 1033 目录。 然后,将 excel.exe 复制到 1033 目录,并将其重命名为 xllex.dll。 有关详细信息,请单击以下链接:http://blogs.msdn.com/eric_carter/archive/2005/06/15/429515.aspx
当对区域设置与 Office 的当前语言版本不匹配的计算机使用其中一种解决方法时,应熟悉 Excel 的行为方式以及 Excel 将如何解释可能针对特定区域设置格式的数据。 有关使用 Visual Studio .NET 编写全球化 Excel 解决方案的更多详细信息,请参阅 MSDN:创建在多个国家/地区中使用的 Office 解决方案中的以下文章
http://msdn2.microsoft.com/en-us/library/aa168494 (office.11) .aspx使用 Microsoft Visual Studio Tools for the Microsoft Office System 创建的解决方案的全球化和本地化问题
http://msdn2.microsoft.com/en-us/library/aa192494 (office.11) .aspx
状态
Microsoft已确认这是“适用于”部分中列出的Microsoft产品中的 bug。
更多信息
重现行为的步骤
-
验证计算机的区域设置是否设置为英语以外的语言。对于 Windows 2000:
-
在 Windows 控制面板中,双击“区域选项”。
-
在“常规”选项卡上,选择一个位置,然后单击“确定”。
对于 Windows XP 或 Windows Server 2003:
-
在“控制面板”中,打开“区域和语言选项”。
-
在“ 区域选项” 选项卡上,选择一个区域设置,然后单击“ 确定”。
-
-
Microsoft Visual Studio .NET 启动。
-
在“文件”菜单上,指向“新建”,然后单击“项目”。 在“新建项目”对话框中的“项目类型”下,单击“Visual Basic 项目”。 在“模板”下,单击“Windows 应用程序”,然后单击“确定”。 默认情况下,将创建 Form1。
-
在“视图”菜单上,单击“工具箱”,然后将按钮添加到 Form1。
-
若要显示窗体的代码窗口,请双击 Button1。
-
在代码窗口中,替换以下代码
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.ClickEnd 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 = NothingEnd Sub
-
将以下行添加到 Form1 代码模块的开头:
Option Strict Off
-
按 F5 生成并运行程序。
-
若要生成错误,请单击“Button1”。 在以下行上发生错误:
oDoc = oApp.Workbooks.Add
参考
有关 Office 自动化的详细信息,请访问以下Microsoft Office 开发网站:
http://support.microsoft.com/ofd 此外,请参阅以下Microsoft知识库文章:
301982 如何从 Visual Basic .NET 自动Microsoft Excel
302084 如何从 Microsoft Visual C# .NET 自动Microsoft Excel