你目前正处于脱机状态,正在等待 Internet 重新连接

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

针对 Office 2003 的支持已终止

Microsoft 已于 2014 年 4 月 8 日终止了针对 Office 2003 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

症状
如果使用 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

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

创建可在多个国家/地区使用的 Office 解决方案使用 Microsoft Visual Studio Tools for the Microsoft Office System 创建的解决方案的全球化和本地化问题
状态
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.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					
  7. 在“Form1”代码模块的开始处添加以下行:
    Option Strict Off
  8. 按 F5 生成并运行程序。
  9. 若要生成错误,请单击“Button1”。下面的代码行上将发生错误:
    oDoc = oApp.Workbooks.Add					
参考
有关 Office 自动化的更多信息,请访问以下 Microsoft Office Development 网站: 此外,请参见下面的 Microsoft 知识库文章:
301982 如何在 Visual Basic .NET 中使 Microsoft Excel 自动运行
302084 如何在 Microsoft Visual C# .NET 中实现 Microsoft Excel 自动化
XL2003 XL2007
属性

文章 ID:320369 - 上次审阅时间:11/22/2007 07:51:29 - 修订版本: 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
反馈