BUG:自动化 Excel 时出现“格式太旧或是类型库无效”错误

文章翻译 文章翻译
文章编号: 320369 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

如果使用 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 = 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)
    
  • 或者,在调用 Excel 方法之前设置 CultureInfo。例如:
    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

在区域设置与 Office 的当前语言版本不匹配的计算机上使用上述解决办法之一时,您应熟悉 Excel 的行为以及 Excel 对于可能针对特定区域设置进行了格式设置的数据的解释方式。有关使用 Visual Studio .NET 编写全球化 Excel 解决方案的更多详细信息,请参见 MSDN 中的以下文章:

创建可在多个国家/地区使用的 Office 解决方案
http://msdn2.microsoft.com/zh-cn/library/aa168494(office.11).aspx
使用 Microsoft Visual Studio Tools for the Microsoft Office System 创建的解决方案的全球化和本地化问题
http://msdn2.microsoft.com/zh-cn/library/aa192494(office.11).aspx

状态

Microsoft 已经确认这是在“适用于”一节中列出的 Microsoft 产品中存在的错误。

更多信息

重现问题的步骤

  1. 验证计算机的区域设置是否设置为英语之外的语言。

    对于 Windows 2000:
    1. 在 Windows 的“控制面板”中,双击“区域选项”。
    2. 在常规“选项”卡上,选择一个位置,然后单击“确定”。
    对于 Windows XP 或 Windows Server 2003:
    1. 在“控制面板”中,打开“区域和语言选项”。
    2. 在“区域选项”选项卡上,选择一个区域设置,然后单击“确定”。
  2. 启动 Microsoft Visual Studio .NET。
  3. 在“文件”菜单上,指向“新建”,然后单击“项目”。在“新建项目”对话框的“项目类型”下面,单击“Visual Basic 项目”。在“模板”下,单击“Windows 应用程序”,然后单击“确定”。默认情况下会创建 Form1。
  4. 在“视图”菜单上,单击“工具箱”,然后向 Form1 添加一个按钮。
  5. 若要显示窗体的代码窗口,请双击“Button1”。
  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 Development 网站:
http://support.microsoft.com/ofd
此外,请参见下面的 Microsoft 知识库文章:
301982 如何在 Visual Basic .NET 中使 Microsoft Excel 自动运行
302084 如何在 Microsoft Visual C# .NET 中实现 Microsoft Excel 自动化

属性

文章编号: 320369 - 最后修改: 2007年11月22日 - 修订: 8.5
这篇文章中的信息适用于:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 标准版
  • Microsoft Visual .NET 2002 标准版
  • Microsoft Visual C# .NET 2002 标准版
  • Microsoft Visual C# .NET 2003 标准版
  • Microsoft Visual C# 2005
  • Microsoft Visual Basic .NET 2003 标准版
  • Microsoft Visual C++ 6.1
  • Microsoft Visual J# .NET 2003 Standard Edition
  • Microsoft Visual Studio Tools for the Microsoft Office System version 2003
关键字:?
kbvs2002sp1sweep kbautomation kbbug kbpending KB320369
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com