2009-09-02 105 views
0

我有一个C++非托管项目,其输出是一个.xll文件,它是在启动时由excel加载的一个加载项,此加载项可以与两个版本,Excel 2003和excel 2007.如何从C++插件获取excel版本

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

有人能告诉我如何得到它吗?

感谢

回答

2

可以调用Excel4(xlfGetWorkspace,&版本,1,& ARG),其中arg是一个数值XLOPER设置为2和版本是一个字符串XLOPER然后可以强制转换为一个整数。

为Excel 2007中的结果将是12

可以在xlAutoOpen做到这一点。

+0

关于这个奇特的地方在于调用xlCoerce如果我将“格式”更改为“葡萄牙语”和“语言”控制面板设置,则会失败。任何想法为什么?只要其英文(美国) – ForeverLearning 2015-03-25 19:02:46

2

这也许是题外话,但GetFileVersionInfo函数将返回VERSION_INFO结构中,你可以使用VerQueryValue函数来检索文件版本。缺点是你必须找到可执行文件的路径,如果你有Excel实例的句柄,可以用GetModileFileName函数完成。

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()); 
+0

完全相同的代码工作得很好谢谢你和Len,这正是我所期待的。 – Vic 2009-09-03 14:33:06