BUG:自動化 Excel 時,發生「格式太舊或是類型程式庫無效」的錯誤

文章翻譯 文章翻譯
文章編號: 320369 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

徵狀

如果您使用 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 = 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 中的下列文件:

Creating Office Solutions for Use in Multiple Countries/Regions
http://msdn2.microsoft.com/zh-tw/library/aa168494(office.11).aspx
Globalization and Localization Issues for Solutions Created with Microsoft Visual Studio Tools for the Microsoft Office System
http://msdn2.microsoft.com/zh-tw/library/aa168494(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 How to automate Microsoft Excel from Visual Basic .NET
302084 How to automate Microsoft Excel from Microsoft Visual C# .NET

屬性

文章編號: 320369 - 上次校閱: 2007年11月20日 - 版次: 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
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