2009-09-02 106 views
0

我有一個C++非託管項目,其輸出是一個.xll文件,它是在啓動時由excel加載的一個加載項,此加載項可以與兩個版本,Excel 2003和excel 2007.如何從C++插件獲取excel版本

現在,我需要做的是獲得用戶實際使用的用於加載項的excel實例的版本。

有人能告訴我如何得到它嗎?

感謝

回答

2

可以調用Excel4(xlfGetWorkspace,&版本,1,& ARG),其中arg是一個數值XLOPER設置爲2和版本是一個字符串XLOPER然後可以強制轉換爲一個整數。

爲Excel 2007中的結果將是12

可以在xlAutoOpen做到這一點。

+0

關於這個奇特的地方在於調用xlCoerce如果我將「格式」更改爲「葡萄牙語」和「語言」控制面板設置,則會失敗。任何想法爲什麼?只要其英文(美國) – ForeverLearning 2015-03-25 19:02:46

2

這也許是題外話,但GetFileVersionInfo函數將返回VERSION_INFO結構中,你可以使用VerQueryValue函數來檢索文件版本。缺點是你必須找到可執行文件的路徑,如果你有Excel實例的句柄,可以用GetModileFileName函數完成。

2

Len Holgate給出了找出正在使用的Excel版本號的正確答案。下面是一些示例代碼:

xloper xlstrVersion, xlintVersion, xlintParam; 
// supply a parameter with value 2 to read the Excel version number as a string 
xlintParam.xltype = xltypeInt; 
xlintParam.val.w = 2; 
int xlret = Excel4(xlfGetWorkspace, &xlstrVersion, 1, &xlintParam); 
// now use the xlCoerce function to convert the version string to an integer 
xlintParam.val.w = xltypeInt; 
xlret = Excel4(xlCoerce, &xlintVersion, 2, &xlstrVersion, &xlintParam); 
const int ExcelVersion = xlintVersion.val.w; 
const bool ExcelVersion12Plus = ExcelVersion >= 12; 

如果你只需要從早期版本區別Excel版本12,然後使用XLCallVer功能如下:

const bool ExcelVersion12Plus = (0x0c00 == XLCallVer()); 
+0

完全相同的代碼工作得很好謝謝你和Len,這正是我所期待的。 – Vic 2009-09-03 14:33:06