我有一个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