簡體   English   中英

用 java 確定 microsoft office 的版本

[英]determine version of microsoft office with java

我編寫了一個程序來創建一組數據,這些數據輸出到 excel 電子表格。 我最初使用 jexcel 庫將數據寫入文件,但我想更新程序,以便它可以檢查是否應該創建“.xls”或“.xlsx”文件,然后寫入適當的文件類型。 Apache POI 似乎是寫入“.xlsx”文件的最佳選擇,但是關於確定正確文件類型的任何想法?

我可以讓用戶在命名文件時選擇,但這對用戶來說似乎是額外的工作,我假設有些用戶不知道他們想要什么文件類型。

有任何想法嗎?

另外,我假設操作系統是 windows 並且用戶有一些版本的 excel,在其他情況下我將只選擇默認文件類型。

一種方法是調用 Windows ASSOC 和 FTYPE 命令,捕獲 output 並對其進行解析以確定安裝的 Office 版本。

C:\Users\me>assoc .xls
.xls=Excel.Sheet.8

C:\Users\me>ftype Excel.sheet.8
Excel.sheet.8="C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE" /e

這里有一個簡單的例子:

import java.io.*;
public class ShowOfficeInstalled {
    public static void main(String argv[]) {
      try {
        Process p = Runtime.getRuntime().exec
          (new String [] { "cmd.exe", "/c", "assoc", ".xls"});
        BufferedReader input =
          new BufferedReader
            (new InputStreamReader(p.getInputStream()));
        String extensionType = input.readLine();
        input.close();
        // extract type
        if (extensionType == null) {
          System.out.println("no office installed ?");
          System.exit(1);
        }
        String fileType[] = extensionType.split("=");

        p = Runtime.getRuntime().exec
          (new String [] { "cmd.exe", "/c", "ftype", fileType[1]});
        input =
          new BufferedReader
            (new InputStreamReader(p.getInputStream()));
        String fileAssociation = input.readLine();
        // extract path
        String officePath = fileAssociation.split("=")[1];
        System.out.println(officePath);
      }
      catch (Exception err) {
        err.printStackTrace();
      }
    }
  }

您可能希望添加更多錯誤檢查,並將從返回的路徑中提取 Office 版本的解析留作練習;-)

您可以在注冊表中搜索密鑰:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App 路徑

正如這個問題所證明的那樣,這可能需要一些工作:

使用 Java 讀取/寫入 Windows 注冊表

看看OfficeVer

您可以將其實現到您的腳本或將其用於代碼分析。 它是跨平台的,很像 Java,所以直接編譯和實現應該沒什么大不了的。 它的工作原理是提取 .docx 和 xlsx 文件,然后讀取版本,以及直接從 .doc 和 .xls 文件中讀取。 OfficeVer 也已將其支持擴展到.pdf 文件(截至撰寫本文時的當前版本為 1.03.1)

如果您願意深入研究注冊表(例如使用jregistrykey ),則此 PowerShell 腳本的翻譯版本應該可以滿足您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM