如何从c ++加载项中获取excel版本

时间:2009-09-02 22:00:19

标签: c++ excel version add-in excel-2007

我有一个c ++非托管项目,其输出是一个.xll文件,它是excel在启动时加载的加载项,这个加载项可以同时使用这两个版本,excel 2003和excel 2007。

现在,我需要做的是获取用户实际用于处理我的加载项的excel实例的版本。

有没有人可以建议我如何获得它?

由于

3 个答案:

答案 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());