определить версию Microsoft Office с Java - PullRequest
4 голосов
/ 01 июня 2011

Я написал программу, которая создает набор данных, которые выводятся в электронную таблицу Excel. Первоначально я использовал библиотеку jexcel для записи данных в файл, но я хотел бы обновить программу, чтобы она могла проверить и посмотреть, нужно ли создавать файл «.xls» или «.xlsx», а затем записать в соответствующий тип документа. Apache POI представляется наилучшим вариантом с точки зрения записи в файл ".xlsx", но есть ли идеи по поводу определения правильного типа файла?

Я мог бы просто сделать так, чтобы пользователь выбрал имя файла, но это кажется дополнительной работой для пользователя, и я предполагаю, что есть пользователи, которые не знают, какой тип файла им нужен.

Есть идеи?

Кроме того, я предполагаю, что ОС - это Windows, и у пользователя есть какая-то версия Excel, в других случаях я просто выберу тип файла по умолчанию.

Ответы [ 4 ]

6 голосов
/ 01 июня 2011

Одним из способов является вызов команд Windows ASSOC и FTYPE, захват выходных данных и их анализ для определения установленной версии 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

Здесь quick пример:

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 из возвращенного пути будет оставлен в качестве упражнения; -)

1 голос
/ 01 июня 2011

Вы можете искать в реестре ключ:

HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Пути к приложениям

Это, вероятно, потребует некоторой работы, о чем свидетельствует этот вопрос:

чтение / запись в реестр Windows с использованием Java

0 голосов
/ 31 августа 2018

Взгляните на OfficeVer .

Вы можете реализовать его в своем скрипте или использовать для анализа кода. Он кросс-платформенный, очень похож на Java, поэтому его компиляция и непосредственная реализация не должны быть сложными. Он работает путем извлечения файлов .docx и xlsx и последующего чтения версии, а также чтения непосредственно из файлов .doc и .xls. OfficeVer также расширил свою поддержку до файлов .pdf (текущая версия на момент написания 1.03.1)

0 голосов
/ 01 июня 2011

Если вы хотите погрузиться в реестр (например, с помощью jregistrykey ) переведенной версии , этот скрипт PowerShell должен делать то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...