我有一個C++非託管項目,其輸出是一個.xll文件,它是在啓動時由excel加載的一個加載項,此加載項可以與兩個版本,Excel 2003和excel 2007.如何從C++插件獲取excel版本
現在,我需要做的是獲得用戶實際使用的用於加載項的excel實例的版本。
有人能告訴我如何得到它嗎?
感謝
我有一個C++非託管項目,其輸出是一個.xll文件,它是在啓動時由excel加載的一個加載項,此加載項可以與兩個版本,Excel 2003和excel 2007.如何從C++插件獲取excel版本
現在,我需要做的是獲得用戶實際使用的用於加載項的excel實例的版本。
有人能告訴我如何得到它嗎?
感謝
可以調用Excel4(xlfGetWorkspace,&版本,1,& ARG),其中arg是一個數值XLOPER設置爲2和版本是一個字符串XLOPER然後可以強制轉換爲一個整數。
爲Excel 2007中的結果將是12
可以在xlAutoOpen做到這一點。
這也許是題外話,但GetFileVersionInfo函數將返回VERSION_INFO結構中,你可以使用VerQueryValue函數來檢索文件版本。缺點是你必須找到可執行文件的路徑,如果你有Excel實例的句柄,可以用GetModileFileName函數完成。
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());
完全相同的代碼工作得很好謝謝你和Len,這正是我所期待的。 – Vic 2009-09-03 14:33:06
關於這個奇特的地方在於調用xlCoerce如果我將「格式」更改爲「葡萄牙語」和「語言」控制面板設置,則會失敗。任何想法爲什麼?只要其英文(美國) – ForeverLearning 2015-03-25 19:02:46