Определить установленную версию Microsoft Excel, используя Apache POI? - PullRequest
0 голосов
/ 29 апреля 2010

Мне нужно определить, какая версия Microsoft Excel установлена ​​на ПК с Windows. Я работаю с Apache POI, но не могу найти простой способ сделать это.

Кто-нибудь знает, имеет ли Apache POI встроенную функциональность для этого? Любые идеи, как сделать это с помощью кода Java?

Ответы [ 3 ]

4 голосов
/ 29 апреля 2010

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

Следуя шаблону, аналогичному описанному в этого вопроса об обнаружении версии Excel в .NET , вы можете использовать JACOB для обнаружения установленной версии Excel, например: *

ActiveXComponent xl = new ActiveXComponent("Excel.Application");
try {
    xl.getProperty("Version");
} finally {
    xl.invoke("Quit", new Variant[] {});
}
3 голосов
/ 29 апреля 2010

Я действительно, действительно, не думаю, что POI обладает такой функциональностью, поскольку она явно написана для работы кроссплатформенно. Это касается только файлов документов.

Если бы я столкнулся с этой задачей, я бы покопался в реестре (через Windows API) для связи с типом файла .XLS. Это, по ошибке, должно дать вам ссылку на самый последний и полностью установленный Excel. Ненадежно, потому что

  • возможно, не будет установлен Excel;
  • пользователь мог изменить связь; или
  • Excel, на который указывает ассоциация, может быть поврежден.

Но, учитывая намек на (обычно) применимый исполняемый файл, вы можете проверить либо заголовок файла .EXE в Excel, либо, возможно, что-то в окружающих файлах, чтобы определить версию Excel.

0 голосов
/ 29 апреля 2010

Ладно, мне пришло в голову, что старые версии Microsoft Excel имеют расширения файлов .xls, а новые - .xlsx.

Я могу просто получить ссылку на файл и получить расширения файлов ... это так просто.

Если у кого-то есть лучшее решение, пожалуйста, дайте мне знать.

...