2010-01-22 4 views
10

Il mio programma crea e riempie correttamente un file Excel (.xls). Una volta creato, vorrei che il nuovo file si aprisse nel programma predefinito del sistema (Excel nel mio caso). Come posso raggiungere questo obiettivo?Apertura di un file Excel utilizzando il programma predefinito

Per un programma precedente dove volevo aprire un file txt in Blocco note, ho usato il seguente:

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(); 
    } 

Quando provo ad usare questo codice per un file Excel che mi dà il seguente errore:

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

suggerimenti?

+0

È possibile trovare la risposta simile qui: jayaneetha

risposta

29

Provare a usare Desktop.open() al posto di Desktop.edit():

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

Se Desktop.open() non è disponibile, l'associazione di file di Windows può essere utilizzato:

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

Grazie, questo ha funzionato perfettamente – clang1234

+0

e cosa succede se sto usando unix machine invece di windows – Suman

+0

@suman, forse 'xdg-open' per aprire l'applicazione predefinita per un determinato tipo di file, vedere http: //manpages.ubuntu.com/manpages/trusty/en/man1/xdg-open.1.html – RealHowTo

0

Probabilmente avete eseguito correttamente il Runtime.exec. Dai un'occhiata a this per vedere se è così.

Se si desidera aprire un file Excel con Java, è consigliabile utilizzare l'API JExcel di Andy Khan. Forse usarlo con uno Swing JTable sarà solo il biglietto.

+0

Sì. Jexcel API stampa colori più realistici della libreria JRXlsExporter – StarCrafter

0

Il modo più semplice ed efficiente.

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