我通過COM自動化(在C#中)使用Excel,但似乎問題無法控制在該框上啓動的Excel版本 - 我們同時使用Excel 9和Excel 11,並且一組特定的電子表格需要使用excel 9否則他們不會工作。如何在com自動化中啓動特定的excel版本?
我包含了excel 9 com引用,但在另一個人機器上啓動了excel 11。我怎樣才能解決這個問題 ?
我通過COM自動化(在C#中)使用Excel,但似乎問題無法控制在該框上啓動的Excel版本 - 我們同時使用Excel 9和Excel 11,並且一組特定的電子表格需要使用excel 9否則他們不會工作。如何在com自動化中啓動特定的excel版本?
我包含了excel 9 com引用,但在另一個人機器上啓動了excel 11。我怎樣才能解決這個問題 ?
我不能確定的問題ProgId的(在CLSID Guids上的友好名稱)用於Excel,但是快速查看會將我引導至「Excel.Application」,作爲您可能激活的類型。
看一下HKEY_CLASSES_ROOT,在我的機器上我看到「Excel.Application」和「Excel.Application.12」,我懷疑你正在激活「Excel.Application」,如果你看下「CurVer」鍵在「Excel.Application」下,它指向「Excel.Application.12」,在你的repro機器上檢查這個值。
我的猜測是你正在啓動Excel.Application,你可能想強制它啓動Excel.Application.9,如果你的目標機器上存在編號。
這裏是一個小的代碼示例:
Type excel9Type = Type.GetTypeFromProgID("Excel.Application.9");
Type excelType = Type.GetTypeFromProgID("Excel.Application");
if (excelType == excel9Type)
{
Console.WriteLine("Default Excel.Application is pointing to 'Verion 9' yay");
}
else
{
Console.WriteLine("Excel is installed, but it's not 'Version 9'");
}
if (excel9Type == null)
{
throw new InvalidOperationException("Excel.Application.9 is not a registered progid");
}
object excelApplication = Activator.CreateInstance(excel9Type);
// Cast excelApplication to whatever you are using as your application type.
這篇文章可能是有用的:
http://forums.devx.com/showthread.php?p=457900#post457900
像上面提意見,這是我不清楚爲什麼的Excel 11將有一個Excel 9表格
行,所以我檢查了兩臺機器這給不同的行爲,switiching到菲爾斯後提示激活解決方案。這兩臺機器都在CurVer regkey中有Excel.Application.9;但是一開始11,一開始9.到目前爲止,我仍然有點虧損。
我從Excel.Application.9返回的類型對象有XL11的一些證據內部調試指出。
還有什麼建議嗎?
什麼做的類ID的GUID的進程id對Excel.Application.9和0.11說在兩臺不同的機器?
爲了得到一個特定的Excel版本,你可以啓動二進制可執行文件,直接使用
System.Diagnostics.Process process = System.Diagnostics.Process.Start(@"C:\Program Files\Microsoft Office\Office11\Excel.exe");
int processId = process.Id;
這會給你的Excel進程的ID。您現在可以連接到此Excel實例,並通過調用AccessibleObjectFromWindow
來獲得對象模型。
此方法需要您使用P/Invoke,並且您還必須首先獲取Excel窗口的句柄。由於這是一個多一點的工作,我會簡單地引用這裏的一切詳細地說明以下問題:
這無關CURVER。這是COM。與所有COM應用程序一樣,Windows通過引用註冊表中相關CLSID項中的LocalServer或InprocServer設置,找出如何啓動它們。
爲Excel的CLSID是:
{00024500-0000-0000-C000-000000000046}
如果你看一下下HKCR \ CLSID這個鍵(HKCR \ Wow6432Node \ CLSID爲您運行的是Windows的64位版本),你會看到這些鍵。如果Excel 2003和Excel 2007的安裝,這三個按鍵:
HKCR\Excel.Appplication
HKCR\Excel.Appplication.11
HKCR\Excel.Appplication.12
將指向相同的同一CLSID這就是爲什麼僅適用於Windows知道如何啓動Excel的一個版本。
如果您發現Excel 2003正在啓動它,因爲CLSID的子鍵指向OFFICE11安裝。
要更改此行爲,請將路徑更改爲指向OFFICE12(或OFFICE14)路徑。 Windows將首先使用該命令的Unicode變體(這是不可理解的)。所以除非你知道如何更新Unicode,否則只需刪除'command'值。
大多數用戶在同一個框上不會有兩個不同版本的Excel。作爲一名開發人員,你可能會這樣做,但用戶通常不會。如果用戶在他們的機器上安裝了Excel 11.0或更高版本,並且您需要Excel 9.0,那麼您遇到了問題... – 2009-01-18 21:11:29
也許您可能想解釋爲什麼工作表無法在更高版本的Excel上正常運行?通常,較高版本的Excel應該能夠毫無困難地運行Excel 9.0電子表格。 – 2009-01-18 21:12:31