【问题标题】:How to get excel version from c++ add-in如何从 C++ 插件获取 excel 版本
【发布时间】:2010-11-25 02:48:40
【问题描述】:

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

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    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,这正是我想要的。
    【解决方案2】:

    您可以调用 Excel4(xlfGetWorkspace, &version, 1, &arg),其中 arg 是设置为 2 的数字 XLOPER,version 是字符串 XLOPER,然后可以将其强制转换为整数。

    Excel 2007 的结果是 12。

    您可以在 xlAutoOpen 中执行此操作。

    【讨论】:

    • 最奇怪的是,如果我从区域和语言控制面板设置中将格式更改为葡萄牙语,则调用 xlCoerce 会失败。知道为什么吗?完全相同的代码只要它的英语(美国)就可以正常工作
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 2013-10-18
      相关资源
      最近更新 更多