2010-01-22 16 views
10

Mi programa crea y completa satisfactoriamente un archivo de Excel (.xls). Una vez creado, me gustaría que el nuevo archivo se abra en el programa predeterminado del sistema (Excel en mi caso). ¿Cómo puedo conseguir esto?Abrir un archivo de Excel utilizando el programa predeterminado

Para un programa antiguo donde quería abrir un archivo txt en el Bloc de notas, que utilizó la siguiente:

if (!Desktop.isDesktopSupported()) { 
     System.err.println("Desktop not supported"); 
     // use alternative (Runtime.exec) 
     return; 
    } 

    Desktop desktop = Desktop.getDesktop(); 
    if (!desktop.isSupported(Desktop.Action.EDIT)) { 
     System.err.println("EDIT not supported"); 
     // use alternative (Runtime.exec) 
     return; 
    } 

    try { 
     desktop.edit(new File(this.outputFilePath)); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 

Cuando trato de utilizar este código para un archivo de Excel que me da el siguiente error:

java.io.IOException: Failed to edit file:C:/foo.xls 

Sugerencias?

+0

Es posible respuesta similar aquí: jayaneetha

Respuesta

29

Intente utilizar Desktop.open() en lugar de Desktop.edit():

Desktop dt = Desktop.getDesktop(); 
dt.open(new File(this.outputFilePath)); 

Si Desktop.open() no está disponible, la asociación de archivos de Windows se puede utilizar:

Process p = 
    Runtime.getRuntime() 
    .exec("rundll32 url.dll,FileProtocolHandler " + this.outputFilePath); 
+0

Gracias, esto funcionó perfectamente – clang1234

+0

¿Qué sucede si estoy usando la máquina Unix en lugar de Windows – Suman

+0

@suman, tal vez 'xdg-open' para abrir la aplicación predeterminada para un tipo de archivo dado, vea http: //manpages.ubuntu.com/manpages/trusty/en/man1/xdg-open.1.html – RealHowTo

0

Probablemente haya utilizado incorrectamente Runtime.exec. Déle una mirada al this para ver si ese es el caso.

Si solo desea abrir un archivo Excel con Java, le recomiendo que use la API JExcel de Andy Khan. Tal vez usar eso con una JTable Swing será solo el boleto.

+0

Sí. Jexcel API imprime colores más realistas que la biblioteca JRXlsExporter – StarCrafter

0

La manera más simple y eficiente.

Desktop.getDesktop().open(new File("inputFilePath")); 
Cuestiones relacionadas