瞭解 Office 2010 物件模型中可能有影響的變更
英文原文已於 2011 年 9 月 9 日星期五發佈
作者:功能相容專家 Curtis Sawin
移轉至 Office 2010 時要面對的挑戰之一就是評估 Office 應用程式物件模型變更的影響力。舉例來說,IT 專業人員和開發人員擔心利用舊版 Excel 建立的巨集,會因為物件模型變更過大,到了 Excel 2010 之後就全部失去作用。當您在 MSDN (請參閱本文章結尾的連結) 檢閱過詳細記載最新版本的 Office 2010 應用程式與較舊版本的 Office (Office 2007、2003、XP 以及 2000) 之間的物件模型差異之後,您就會瞭解巨集無法運作的原因。然而,大部分的更動都不會有任何的影響,您的巨集也幾乎不受牽連。而「大部分」是指什麼呢?以下逐一為您摘述:
- Excel 2010、Word 2010、PowerPoint 2010、Outlook 2010 以及 Access 2010 的物件模型全部加起來之後,會得到超過 2 萬 2 千個項目 (屬性、方法和常數)。
- 物件模型共有 2,134 個變更
- 可能有影響的變更有 49 個
49 個可能有影響的變更,跨 5 個應用程式、4 個舊版本。這就是全部的改變。下表為您彙整我們分析得出的數據:
本文說明何謂沒有影響的變更以及可能有影響的變更。另提供:為了方便您日後參考,我們準備了一張表格,內容列出可能有影響的所有變更。文章最後會附上這張表格的 .pdf 檔案。
沒有影響以及可能有影響的變更
MSDN 文件提供每一個 Office 2010 應用程式物件模型的所有變更。這些變更已經過適當排列,所以每一個 Office 舊版本都會列出所有已經更改、移除或者淘汰的方法或屬性。
例如,對 Excel 2010 而言,在物件模型方面有將近 900 個項目與舊版不同。未深入分析之前,看起來為數龐大,十分驚人。MSDN 文章 Excel 2010 物件模型與舊版本之間的變化 (可能為英文網頁)會列出每一個已經變更的項目。列印完整文章,大約有 90 頁。
淘汰的項目– 沒有影響
絕大多數的設計變更都是一些淘汰的 (亦被列入隱藏的) 項目。那麼,什麼是「淘汰的項目」?又如何影響您的巨集?如果某個項目被列入淘汰的項目,這表示您不用期望未來的 Office 版本會再看到它,而且您應該計劃未來升級程式碼。不過淘汰的項目仍然有效!因此,如果您的巨集程式碼是為舊版的 Office 而設計的,而且它包含淘汰的方法、屬性或常數,目前不需要採取任何動作,就可以讓這些項目在 Office 2010 中發揮功能。將近 900 個更改設計的項目 (正確數字應該是 882 個),其中有 794 個是淘汰的項目。這表示 Excel 物件模型所修改的 900 個左右的設計,如果您的巨集包含這些項目,其中將近 800 個是不會產生任何影響的。
所以解決淘汰的項目這件事可以暫緩,不過也不要完全不把它們當一回事。包含類似項目的程式碼應該再檢查一遍並加以更新,這樣才能確定現在淘汰的程式碼不會在未來成為毫無用處的程式碼。
移除的項目 – 有影響
您應該特別留意「移除的」項目。列為已移除的項目不會出現在 Office 2010 物件模型中。如果您有一個巨集包含的項目已經在 Office 2010 移除,那麼這個巨集就再沒有任何功能了。以 Excel 2010 為例,目前有 9 個物件模型項目已經從舊版本移除。您要留意這些項目。請取代它們。
變更的項目 – 幾乎沒有影響
「變更的」項目是一些自舊版本之後又被變更的方法和屬性。例如,變更的方法可能會傳回不同的資料類型,或者是從「唯讀」變更成「讀取/寫入」的屬性。只要稍加分析,就會發現大部分變更的項目都是可接受其他選用參數的方法或屬性。例如,在 Excel 2003,ListRows.Add (可能為英文網頁) 方法提供一個選用的參數。在 Excel 2010,它提供兩個選用的參數。增加的選用參數不會對它的用途產生任何影響。如果您在 Excel 2003 使用這個方法且僅提供一個參數,則相同的程式碼無須經過修改,同樣可以在 Excel 2010 發揮功能。
在 Excel 2010 中,目前有 97 個變更的項目。這些項目都不具可能的影響。現有的程式碼如果包含「變更的」項目,無論這些項目如何變化,都不會受到影響。
所以,總共有 882 個方法和屬性與先前 4 個舊版本的 Excel 不一樣,其中只有 9 個會有影響。
並不是所有更改設計的項目都是毫無影響的。例如,在 PowerPoint 中,Presentation.SaveAs 方法會為選用的參數 FileFormat 使用不同的預設值。這個預設值已經從 “1” (ppSaveAsPresentation,PowerPoint 2003) 變更成 “11” (ppSaveAsDefault,PowerPoint 2010)。因此,如果使用這個方法的時候,未明確提供 FileFormat 參數的值,那麼在 PowerPoint 2003 和 PowerPoint 2010 執行同一個巨集之後,就會產生不一樣的結果。所以,設計的變更是否會產生可能的影響,取決於這個方法的應用方式。
OCCI 不會偵測物件模型的變更?
像 Office Code Compatibility Inspector (OCCI) (可能為英文網頁) 此類的工具可以用來掃描巨集,瞭解它們是否包含和舊版本不同的程式碼。OCCI 會提供一份報表,裡面列出已經變更、淘汰或移除的項目。您也可以從報表中瞭解目前是否使用任何外部參照 (如果升級作業系統時一併移轉 Office 2010,需特別注意),以及您所做的任何宣告是否未明確標示同樣適用於 64 位元 Office 環境。以下螢幕擷取畫面是 OCCI 在內含巨集的 Excel 活頁簿的發現項目摘要。
請注意,OCCI 使用「重新設計」(redesigned) 這個字代替「移除」(removed) (不過,我不知道這有什麼不同)。
因為 OCCI 會列出所有不一樣的地方,所以您必須排列所有的結果,這樣才能弄清楚哪些是「具體可行」的資訊。這表示 OCCI 會告訴您一些「不一樣的地方」,至於哪些地方需要立即解決?哪些地方最後還是要解決?OCCI 並沒有提供進一步的資訊。下表就是要填補資訊的空白。這張表格列出哪些設計變更會產生可能的影響、應該馬上評估的因素:根據應用方式的不同,包含這些項目的程式碼或許不需要任何的修改。因此,請當它是解決任何巨集的「快速入門」指南。不過,請勿過度依賴任何工具,甚至是以下的表格。冒著被認為有點囉嗦的危險,再說一次,要想確定巨集是否有效,執行巨集是唯一的方法。
結語
下表列出所有可能有影響的變更,其中包括所有已移除的項目,以及可能有影響的變更項目。使用這張表格可快速找出表格中您可能用到的程式碼。雖然可以使用 OCCI 這類工具偵測所有修改過的設計,不過當您將巨集移轉至 Office 2010 時,任何已經變更卻沒有影響的物件模型都不會列入這張表格中,所以請參考這張表格,瞭解哪些是具體可行 (以及值得採用) 的資料。
依賴工具的諸多問題之一就是,這些工具通常提供的資料只利於回答技術性問題 (像是「什麼地方變更了?」),而不是實務問題 (像是「這對於我的解決方案有何影響?」)。工具當然有助於問題的自動偵測,而且又可以加快問題的解決,省時省力,但是過度依賴工具會導致工具提供的資料被誤用至不相關的問題。一如往常,升級至 Office 2010 的時候,想知道您的方案是否有效,最好的方法就是儘可能在測試環境中,進行使用者的實務應用測試。
(請按一下本文章結尾的連結,即可下載上述表格的 .pdf 檔案。)
如需詳細資訊
以下連結提供各種物件模型的差異。
- Access 2010 物件模型與舊版本的不同 (可能為英文網頁)
- Excel 2010 物件模型與舊版本的不同 (可能為英文網頁)
- Outlook 2010 物件模型與舊版本的不同 (可能為英文網頁)
- PowerPoint 2010 物件模型與舊版本的不同 (可能為英文網頁)
- Word 2010 物件模型與舊版本的不同 (可能為英文網頁)
這是翻譯後的部落格文章。英文原文請參閱 Understanding potentially impactful changes in the Office 2010 object model