文章編號: 268016 - 上次校閱: 2007年1月10日 - 版次: 5.4

Internet Explorer 無法開啟的 Excel 增益集 (*.xla) 檔案

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

徵狀

當您瀏覽至 Microsoft Excel 增益集 (*.xla) 檔案從網頁執行 Internet Explorer 時,增益集無法載入並 Internet Explorer 會顯示警告,您要尋找的資料頁就是目前無法使用。在中開啟新增-使用 HTTP 通訊協定,但不是適用於 FILE 通訊協定時,會發生問題。

發生的原因

警告 [Excel 增益集 (XLA) 時,就會發生其實並不包含任何工作表的 Excel 活頁簿 (*.xls)。只有部分所使用的 Excel 檔案是 Visual Basic 應用程式 (VBA) 專案包含增益集 (VBA) 程式碼的 sub-storage。不過,因為一個 XLA 只是偽裝的 XLS 它共用相同 CLSID 為 Excel 活頁簿 ("{00020820-0000-0000-C000-000000000046}"),而由相同的多用途網際網路郵件延伸 (MIME) 型別代表 (「 應用程式/vnd.ms-Excel")。

Internet Explorer 版本 3.0 和更新版本支援就地啟動的網頁瀏覽器內的 ActiveX 文件物件 (ADO)。因為一個 XLA 具有相同 CLSID 為 Excel 活頁簿時,網際網路總管會嘗試載入成內嵌的活頁簿 XLA。因為 [XLA 包含進行就地編輯的工作表,內嵌失敗且 Internet Explorer 會顯示警告。執行已啟動的內嵌的 Excel 的執行個體可能立即關閉或是成為可見。不過,因為失敗的就地啟動的顯然沒有任何工具列或功能表。

Internet Explorer 會依賴 [MIME 類型設定為從伺服器到知道如何啟動頁面設定為檢視所傳回的文件。 如果 HTTP 伺服器傳回要求的網頁的 「 應用程式/vnd.ms-Excel 」 的 MIME 內容類型,Internet Explorer 嘗試載入檔案內容當作一個 Excel 活頁簿。將預設情況下,網際網路資訊服務 (IIS) *.xla 副檔名與相關聯這個的 MIME 類型,讓超連結至 XLA 檔案通常會導致所描述的行為。

解決方案

若要避免開啟增益集,藉由使用 HTTP 通訊協定的問題,您的 Web 網頁可以使用來啟動 「 自動化 」,Microsoft Excel 的 [用戶端指令碼,並再從 URL 載入 [XLA。下列步驟示範這項技術:
  1. 在 [記事本] 中建立新的文字檔,然後將下列的程式碼:
    <HTML>
    <BODY>
    Press the button to start Excel and load an XLA.
    
    <SCRIPT LANGUAGE="JScript">
    function LoadMyXLA()
    {
      var oXL = new ActiveXObject("Excel.Application");  
      var oAddin = oXL.Workbooks.Open("C:\\Test.xla");
      oAdd.RunAutoMacros(1);
      oXL.Visible = true;
      oXL.UserControl = true;
    }
    </SCRIPT>
    <P><INPUT ID=button1 TYPE=button 
       VALUE="Load XLA" ONCLICK="LoadMyXLA()">
    </BODY>
    </HTML>
    					
  2. 取代字串傳遞至 開啟 的方法,以您 XLA (固定的路徑或 URL) 路徑。
  3. 儲存文字檔案,和以 HTM 副檔名重新命名然後在 Internet Explorer 中開啟],然後按一下按鈕]。請注意 Excel 啟動在不同的視窗中,並載入 [XLA。

其他相關資訊

Excel 增益集 (*.xla) 並不支援內嵌,而且無法開啟的 Internet Explorer 內。使用者不會正常開啟 XLAs ; 相反的他們開啟一個 XLS,(如果需要的話) 在啟動期間載入一或多個 XLAs。只在極少數的情況下不會在使用者需要啟動一個 XLA 直接。在這些狀況下指令碼可以用如果檔案是透過 Internet Explorer 會啟動。

自動化的 Excel 從指令碼無法運作,但是,如果用戶端電腦設定為高安全性,或者如果 [初始化中並不標示為安全用於指令碼的 ActiveX 控制項] 選項已被設定停用。這些用戶端必須降低其安全性,以提示,才能選擇執行指令碼,然後開啟 [XLA。XLAs 和 Excel 自動化是不安全的預設指令碼。

有關如何的相關資訊以程式設計方式變更這些 Internet Explorer 選項從受信任的控制項,或按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項在下列文件安裝程式 」 公用程式 (但不是指令碼):
182569? (http://support.microsoft.com/kb/182569/ ) Internet Explorer 安全性區域供進階使用者的登錄項目

其他因應措施和考量

如果指令碼不符合您的網頁設計的解決方案,可以設法避免透過登錄變更問題,並修改 [XLA 檔案本身。這必須完成 Internet Explorer] 或 [動態伺服器網頁 (ASP) 以外的地方,不用於 Web 應用程式的可行方案無法控制用戶端環境。下列討論內容更詳細地解釋問題而且您必須執行要避免這個問題的原因。

由於 Internet Explorer 會使用 HTTP GET 作業期間由伺服器指定的 MIME 類型,您必須防止 IIS (或與您通訊的 Web 伺服器) 將 *.xla 副檔名與 「 應用程式/vnd.ms-Excel"MIME 類型相關聯。IIS 將這個資訊儲存在 Web 資料夾的 [屬性] 設定 (也就是在 Metabase 中)。若要變更您的 IIS Web 站台的行為,您需要編輯中繼庫。如果要針對 IIS 4.0 及 5.0 版本執行這項操作,您可以使用下列步驟執行:
  1. 啟動 [網際網路資訊服務管理員]。
  2. 包含增益集在 預設的 Web 站台 資料夾上按一下滑鼠右鍵,然後從下拉功能表中選擇 [屬性]。
  3. 選取 [HTTP 表頭] 標籤,並按一下 [MIME 對應區段之下的 [檔案類型
  4. 按一下 [新類型。指定的 關聯副檔名,] 和 [文字/純.xla,針對 內容類型 (MIME)。按一下 [確定] 以新增檔案類型。
  5. 按一下 [確定] 關閉 [檔案類型] 對話方塊,然後按一下 [確定] 以關閉 [資料夾內容] 對話方塊。

    注意: [IIS 伺服器可能需要關閉並重新啟動的變更才會生效。
針對本機,開啟的檔案或從 [未指定 MIME 類型的網頁伺服器開啟的檔案,Internet Explorer 使用 CLSID 從檔案本身關聯的伺服器,並載入檔案。因為一個 XLA 相同的 XLS、 根目錄存放 CLSID 是 Excel 活頁簿 (Excel.Sheet.8)。 若要防止 Internet Explorer 使用這個 CLSID,需要去除從使用 OLE 結構化儲存體 API 的檔案。這應該不會影響在 Excel 中, 檔案的功能,但如果在 Excel 中修改檔案,CLSID 是 re-inserted 到檔案。

下列的 Microsoft Visual C++ 程式碼將示範如何使用 NULL CLSID 取代主要儲存區的 CLSID:
#include <windows.h>
int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
   LPSTR pszCmdLine, int nCmdShow)
{
  WCHAR wszFile[MAX_PATH];
  CHAR  szFile[MAX_PATH];
  szFile[0] = 0;

  OPENFILENAME    ofn;
  ZeroMemory(&ofn, sizeof(OPENFILENAME));

  if (FAILED(CoInitialize(NULL)))
    return -1;

  ofn.lStructSize      = sizeof(OPENFILENAME);
  ofn.lpstrFilter      = "Microsoft Excel Addins (*.xla)\0*.xla\0\0";
  ofn.nFilterIndex     = 1L;
  ofn.lpstrDefExt      = "xla";
  ofn.lpstrFile        = szFile;
  ofn.nMaxFile         = MAX_PATH;
  ofn.Flags            = OFN_HIDEREADONLY | OFN_FILEMUSTEXIST;

  if (GetOpenFileName(&ofn) && (szFile[0] != '\0'))
  {
		
    if (!MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,
           szFile, -1, wszFile, MAX_PATH))
    {
       MessageBox(NULL, "Can't convert to Unicode!",
          "XlaClsid", MB_ICONSTOP | MB_SETFOREGROUND);
       return -2;
    }

    IStorage* pstg = NULL;
    HRESULT hr = StgOpenStorage(wszFile, NULL,
             STGM_READWRITE | STGM_SHARE_EXCLUSIVE, NULL, 0, &pstg);
    if (SUCCEEDED(hr) && pstg)
    {			
       pstg->SetClass(GUID_NULL);
       pstg->Release();
       MessageBox(NULL, "Call succeeded. CLSID has been stripped.",
          "XlaClsid", MB_ICONINFORMATION | MB_SETFOREGROUND);
    }
    else
    {
       MessageBox(NULL, "Unable to open file. It may be in use.",
          "XlaClsid", MB_ICONSTOP | MB_SETFOREGROUND);
    }
    
  }

  CoUninitialize();
  return 0;
}
				
筆記 Internet Explorer 不會檢查 CLSID 從結構化儲存體檔案,如果 [XLA 開啟從 [網址] 列,但不會檢查 [XLA 是否在超連結中參考。雖然這種行為可能會變更 Internet Explorer 的未來版本中,應該不依賴目前的行為,並且放棄從 [XLA 移除 CLSID。

如果移除檔案的 CLSID,在伺服器中並未設定指定的 MIME 類型,Internet Explorer 再使用檔案的副檔名來啟動 Excel,然後載入該 XLA。根據用戶端系統上登錄設定,檔案可能仍然開啟的內嵌,所以可能需要修改的用戶端登錄。感興趣的登錄機碼的:
   HKEY_CLASSES_ROOT\.xla
				
-以及-
   HKEY_CLASSES_ROOT\Excel.Addin
				
您需要確定有未指定這些登錄機碼之下,因為索引鍵可以 re-direct Internet Explorer MIME 類型進出還有回活頁簿 CLSID 的內容類型"值。而且,Excel.Addin 機碼可能包含也 re-directs Internet Explorer 使用內嵌,CLSID 子機碼。此機碼應該重新命名或移除,以防止 Internet Explorer 尋找 CLSID。

如果所有上述的步驟會接著 Internet Explorer 會找不到檔案類型的 CLSID,會載入這個檔案含有 ShellExecute 命令。如同使用者必須按兩下從 Internet Explorer,這會執行檔。

?考

如需有關 MIME 型別和 Office 的詳細資訊文件,按一下下列文章編號,檢視 「 文件 「 Microsoft 知識庫 」 中:
199841? (http://support.microsoft.com/kb/199841/ ) HOWTO: 顯示在 IE 中使用 Excel MIME 類型的 ASP 結果
266263? (http://support.microsoft.com/kb/266263/ ) 注意: Word 2000 和 Excel 2000 ASP 原始檔時顯示使用資料流的資料的 MIME 類型
247389? (http://support.microsoft.com/kb/247389/ ) IIS: 如何停用特定的 MIME 類型的快取

這篇文章中的資訊適用於:
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Internet Explorer 3.0
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 5.5
關鍵字:?
kbmt kbprb kbprogramming KB268016 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:268016? (http://support.microsoft.com/kb/268016/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。