![](/img/trans.png)
[英]Is there any Java library which supports both Microsoft office and Open 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 路徑
正如這個問題所證明的那樣,這可能需要一些工作:
看看OfficeVer 。
您可以將其實現到您的腳本或將其用於代碼分析。 它是跨平台的,很像 Java,所以直接編譯和實現應該沒什么大不了的。 它的工作原理是提取 .docx 和 xlsx 文件,然后讀取版本,以及直接從 .doc 和 .xls 文件中讀取。 OfficeVer 也已將其支持擴展到.pdf 文件(截至撰寫本文時的當前版本為 1.03.1)
如果您願意深入研究注冊表(例如使用jregistrykey ),則此 PowerShell 腳本的翻譯版本應該可以滿足您的需求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.