您目前已離線,請等候您的網際網路重新連線

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)
描述:格式太舊或是類型程式庫無效
發生的原因
當下列情況成立時,您就會收到這個錯誤:
  • 方法需要 LCID (地區設定識別碼)。
  • 您執行英文版的 Excel。但是,電腦的地區設定設為非英文語言。
如果用戶端電腦執行英文版的 Excel,而目前使用者的地區設定設為英文以外的語言,Excel 將會嘗試尋找已設定語言的語言套件。如果找不到語言套件,便會報告錯誤。
其他可行方案
若要解決這個問題,您可以使用下列其中一種方法:
  • 針對您的 Office 版本安裝多語系使用者介面 (MUI) 套件。
  • 使用 InvokeMember 執行 Excel 方法或屬性,以便指定呼叫的 CultureInfo。例如,下列程式碼示範如何叫用 Workbooks 物件的 Add 方法且 CultureInfo 設為「en-US」:
    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 中的下列文件:

Creating Office Solutions for Use in Multiple Countries/RegionsGlobalization and Localization Issues for Solutions Created with 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 How to automate Microsoft Excel from Visual Basic .NET
302084 How to automate Microsoft Excel from Microsoft Visual C# .NET
XL2003 XL2007
內容

文章識別碼:320369 - 最後檢閱時間:11/20/2007 03:13:04 - 修訂: 8.4

Microsoft Office Excel 2007, Microsoft Office Excel 2003, Microsoft Excel 2002 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 標準版, Microsoft Visual C# 2005, Microsoft Visual Basic .NET 2003 Standard Edition, 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
意見反應