【发布时间】:2010-11-25 02:48:40
【问题描述】:
我有一个 c++ 非托管项目,其输出是一个 .xll 文件,该文件是 excel 在启动时加载的加载项,此加载项可以与两个版本一起使用,excel 2003 和 excel 2007。
现在,我需要做的是获取用户实际用于处理我的加载项的 excel 实例的版本。
有人可以建议我如何获得它吗?
谢谢
【问题讨论】:
标签: c++ excel version add-in excel-2007
我有一个 c++ 非托管项目,其输出是一个 .xll 文件,该文件是 excel 在启动时加载的加载项,此加载项可以与两个版本一起使用,excel 2003 和 excel 2007。
现在,我需要做的是获取用户实际用于处理我的加载项的 excel 实例的版本。
有人可以建议我如何获得它吗?
谢谢
【问题讨论】:
标签: c++ excel version add-in excel-2007
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());
【讨论】:
您可以调用 Excel4(xlfGetWorkspace, &version, 1, &arg),其中 arg 是设置为 2 的数字 XLOPER,version 是字符串 XLOPER,然后可以将其强制转换为整数。
Excel 2007 的结果是 12。
您可以在 xlAutoOpen 中执行此操作。
【讨论】:
这可能是题外话,但GetFileVersionInfo 函数将返回 VERSION_INFO 结构,您可以在其中使用 VerQueryValue 函数检索文件版本。缺点是您必须找到可执行文件的路径,如果您有 Excel 实例的句柄,则可以使用 GetModileFileName 函数来完成。
【讨论】: