我有一个c ++非托管项目,其输出是一个.xll文件,它是excel在启动时加载的加载项,这个加载项可以同时使用这两个版本,excel 2003和excel 2007。
现在,我需要做的是获取用户实际用于处理我的加载项的excel实例的版本。
有没有人可以建议我如何获得它?
由于
答案 0 :(得分:2)
这可能是偏离主题的,但GetFileVersionInfo函数将返回VERSION_INFO结构,您可以在其中使用 VerQueryValue 函数来检索文件版本。缺点是您必须找到可执行文件的路径,如果您具有Excel实例的句柄,则可以使用 GetModileFileName 函数完成此操作。
答案 1 :(得分:2)
你可以调用Excel4(xlfGetWorkspace,& version,1,& arg),其中arg是一个数字XLOPER,设置为2,version是一个字符串XLOPER,然后可以强制转换为整数。
Excel 2007的结果为12。
您可以在xlAutoOpen中执行此操作。
答案 2 :(得分: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());