【问题标题】:Determine installed Microsoft Excel version using Apache POI?使用 Apache POI 确定已安装的 Microsoft Excel 版本?
【发布时间】:2015-07-29 05:59:46
【问题描述】:

我需要确定 Windows PC 上安装了哪个版本的 Microsoft Excel。我正在使用 Apache POI,但想不出一个简单的方法来做到这一点。

有人知道 Apache POI 是否具有执行此操作的内置功能?任何想法如何使用 Java 代码做到这一点?

【问题讨论】:

    标签: java apache excel apache-poi


    【解决方案1】:

    POI 提供了一种无需使用任何 Excel API 即可编写 Excel 文档的机制。我怀疑它是否有检测已安装版本的机制,因为它不依赖于已安装的 Excel 版本。

    按照类似于this question about detecting the Excel version in .NET 中描述的模式,您可以使用JACOB 来检测已安装的 Excel 版本,如下所示:

    ActiveXComponent xl = new ActiveXComponent("Excel.Application");
    try {
        xl.getProperty("Version");
    } finally {
        xl.invoke("Quit", new Variant[] {});
    }
    

    【讨论】:

    • 现在这很漂亮,+1!作为一个 Windows 的仇恨者,我从没想过用 COM 来做这种事情。
    • 恭喜你 1000 :)
    【解决方案2】:

    我真的,真的不认为 POI 有这个功能,因为它被明确编写为跨平台工作。它只处理文档文件。

    如果我面临这个任务,我会深入研究注册表(通过 Windows API)来关联.XLS 文件类型。这样,err 应该会为您提供一个指向最新且完全安装的 Excel 的链接。不可靠,因为

    • 可能没有安装 Excel;
    • 用户可能已更改关联;或
    • 关联指向的 Excel 可能已损坏。

    但考虑到(通常)适用的可执行文件的提示,您可以检查 Excel 的 .EXE 文件头或周围文件中的某些内容以确定 Excel 的版本。

    【讨论】:

      【解决方案3】:

      好吧,我突然想到旧的 Microsoft Excel 版本的文件扩展名为 .xls,而新版本的文件扩展名为 .xlsx。

      我可以获取文件的引用并获取文件扩展名……就这么简单。

      如果有人有更好的解决方案,请告诉我。

      【讨论】:

      猜你喜欢
      • 2017-05-30
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 2011-07-14
      • 1970-01-01
      相关资源
      最近更新 更多