Java — запуск Excel с помощью runtime.getRuntime().exec

try {
    Runtime.getRuntime().exec("excel C:\\file.xls");
} catch (IOException ex) {
    System.out.println(ex);
}

Не работает. Я должен указать полный путь к excel.exe, чтобы работать. Как я могу сделать его универсальным (для любых папок/версий Excel)? Когда я запускаю ту же строку из ОС с помощью Windows «Выполнить» («Пуск» -> «Выполнить»), она работает. Есть ли код на Java для имитации команды Windows «Выполнить»?


person Stefanos Kargas    schedule 20.10.2010    source источник


Ответы (4)


Почему бы вам не попробовать класс Desktop (API doc здесь), представленный в JDK6, в котором есть метод

public void open(File file) throws IOException

который задокументирован как то, что вы хотите сделать:

Запускает связанное приложение для открытия файла. Если указанный файл является каталогом, для его открытия запускается файловый менеджер текущей платформы.

Конечно, это предполагает, что расширение .xls отображается операционной системой в Excel. Тогда вы можете пойти с

Desktop.getDesktop().open(new File("c:\\file.xls"));
person Jack    schedule 20.10.2010
comment
Это работает, но у меня проблемы с пробелами в пути. Пробовал URI, но не работал. - person Stefanos Kargas; 21.10.2010
comment
возможно, вам следует попробовать вставить имя файла в двойные кавычки .. конечно, вам следует избегать их: new File("\"c:\\filename with spaces.xls\"") - person Jack; 21.10.2010

Я использую Runtime rt = Runtime.getRuntime().exec("cmd.exe /C start " + *filename*, у меня работает на платформах Windows

person Fabrice Khedadi    schedule 05.08.2015

Вызовите команду Windows «start.exe» вместо непосредственного вызова Excel. Start.exe появляется для поиска путей и т. Д. Однако он все равно может не найти его, если он не указан в пути.

person Brian Knoblauch    schedule 20.10.2010

Вы можете попробовать использовать «cmd» вместо «excel», а затем передать массив параметров.

Для упрощения отладки вы также можете попробовать использовать ProcessBuilder. По моему опыту, гораздо приятнее работать с: http://download.oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html

person marc esher    schedule 20.10.2010