Leggere e scrivere fogli di calcolo Excel

La comunità open source ha creato molti progetti Java open source, che vanno dal software per la creazione di grafici ai framework di giochi agli elaboratori di testi. In questo post, presento un progetto di libreria open source per la lettura e la scrittura di fogli di calcolo Microsoft Excel.

Consigliare una libreria di fogli di calcolo

D: Mi è stato chiesto di estendere il software per fogli di calcolo basato su Java della mia azienda per leggere e scrivere fogli di calcolo Excel. Potete consigliarmi una libreria Java open source che mi aiuterà in questo compito?

R: Potresti voler controllare JExcelAPI, che è una libreria open source matura e basata su Java che ti consente di leggere, scrivere e modificare fogli di calcolo Excel. Ecco alcune delle sue numerose funzionalità:

  • Legge i dati dalle cartelle di lavoro di Excel 95, 97, 2000, XP e 2003
  • Legge e scrive formule (solo Excel 97 e versioni successive)
  • Genera fogli di calcolo in formato Excel 2000
  • Supporta font, numeri e formattazione della data
  • Supporta l'ombreggiatura delle celle, il bordo delle celle e la colorazione delle celle
  • Modifica i fogli di lavoro esistenti
  • Supporta la copia del grafico
  • Supporta l'inserimento e la copia di immagini in fogli di calcolo

JExcelAPI è stato sviluppato da Andrew Kahn ed è stato rilasciato sotto GNU Lesser General Public License.

Download della libreria JExcelAPI

D: Come si scarica JExcelAPI?

R: Completa i seguenti passaggi per scaricare JExcelAPI:

  1. Punta il tuo browser al sito SourceForge di JExcelAPI.
  2. Fare clic sul jexcelapicollegamento.
  3. Nella pagina risultante, fare clic su uno dei collegamenti della cartella. Ad esempio, ho fatto clic sul 2.6.12collegamento.
  4. Nella pagina risultante, fare clic sul nome del file dell'archivio di distribuzione. Ad esempio, ho fatto clic sul jexcelapi_2_6_12.zipcollegamento.
  5. Dopo un breve ritardo, il browser dovrebbe chiederti di salvare questo file. Vai avanti e salva il file.

Dopo il download, disarchiviare questo file. Dovresti osservare una jexcelapihome directory all'interno di una jexcelapi_2_6_12directory.

Dimostrazione della libreria JExcelAPI

D: La libreria JExcelAPI contiene delle demo?

R: La jexcelapihome directory di JExcelAPI contiene un jxl.jarfile che contiene demo per la lettura, la scrittura e la copia di fogli di calcolo.

La demo di lettura legge un foglio di calcolo esistente, convertendolo in formato CSV o XML tramite l' opzione della riga di comando -csvo -xml. Considera i seguenti esempi:

java -jar jxl.jar -csv budget.xls java -jar jxl.jar -xml budget.xls

Questi esempi leggono budget.xlse restituiscono il contenuto in formato CSV e XML sullo standard output. Quando né -csv-xmlè specificato, -csvviene assunto.

La demo di scrittura crea un foglio di calcolo di esempio che include formule, bordi, immagini e altro ancora. Questo foglio di calcolo viene generato specificando l' -writeopzione della riga di comando, come illustrato di seguito:

java -jar jxl.jar -write sample.xls

La Figura 1 mostra parte del sample.xlsfoglio di calcolo risultante .

Figura 1. Ho usato LibreOffice Calc per accedere al foglio di calcolo sample.xls

La copia demo copia il foglio di calcolo di esempio jxlrwtest.xls, che è archiviato nella stessa directory di jxl.jar, in un nuovo foglio di calcolo. Nel foglio di calcolo risultante, il primo foglio (originale) rimane invariato mentre il secondo foglio (modificato) contiene valori modificati.

Questa demo viene generata specificando l' -rwopzione della riga di comando seguita da jxlrwtest.xlse il nome del foglio di calcolo di output. Considera la seguente riga di comando:

java -jar jxl.jar -rw jxlrwtest.xls copy.xls

Questa riga di comando copia jxlrwtest.xlsin copy.xls. La Figura 2 mostra il secondo foglio (modificato) in LibreOffice Calc.

Figura 2. Fare clic sulle schede originale e modificata per visualizzare i fogli originali e modificati

Compreso JExcelAPI per la compilazione e l'esecuzione

D: Come includo JExcelAPI durante la compilazione del codice sorgente e l'esecuzione di un'applicazione?

R: Per includere JExcelAPI durante la compilazione del codice sorgente e l'esecuzione di un'applicazione, eseguire una delle seguenti operazioni:

  • Aggiungi il file jexcelapidella directory home jxl.jaralla tua CLASSPATHvariabile d'ambiente.
  • Includere jxl.jartramite l' opzione della riga di comando del programma javace .java-cp

Programmazione con JExcelAPI

D: Come si creano programmi Java che sfruttano JExcelAPI?

R: La jexcelapihome directory include un tutorial.htmlfile che presenta un tutorial di base sulla programmazione con JExcelAPI. Il tutorial mostra come leggere, scrivere e copiare fogli di calcolo. Il tutorial discute anche la formattazione.

jexcelapiinclude anche una docssottodirectory, che fornisce l'accesso a un'ampia documentazione API. Punta il tuo browser Web al index.htmlfile di questa directory e puoi esplorare i tipi nei quattro pacchetti documentati di questa libreria:

  • jxl: i principali tipi di confezione
  • jxl.demo: tipi per le varie demo
  • jxl.format: tipi relativi alla formattazione
  • jxl.write: tipi per la scrittura su un foglio di calcolo

Note that this list isn't exhaustive. Additional packages such as jxl.read are present but are not documented. To learn about additional packages, execute jar tvf jxl.jar and examine the package information in the resulting JAR listing.

To help you get started with JExcelAPI, I've created a simple JExcelAPIDemo application that demonstrates creating a new spreadsheet that is saved in output.xls and then reading and outputting the contents of this spreadsheet. Check out Listing 1.

Listing 1. Writing and reading a simple spreadsheet

import java.io.File; import java.io.IOException; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.Number; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; public class JExcelAPIDemo { public static void main(String[] args) throws BiffException, IOException, WriteException { WritableWorkbook wworkbook; wworkbook = Workbook.createWorkbook(new File("output.xls")); WritableSheet wsheet = wworkbook.createSheet("First Sheet", 0); Label label = new Label(0, 2, "A label record"); wsheet.addCell(label); Number number = new Number(3, 4, 3.1459); wsheet.addCell(number); wworkbook.write(); wworkbook.close(); Workbook workbook = Workbook.getWorkbook(new File("output.xls")); Sheet sheet = workbook.getSheet(0); Cell cell1 = sheet.getCell(0, 2); System.out.println(cell1.getContents()); Cell cell2 = sheet.getCell(3, 4); System.out.println(cell2.getContents()); workbook.close(); } }

Listing 1 first creates a writable workbook by invoking one of Workbook's factory methods. A writable sheet is then created for this workbook, and then a label and a number are added as the sheet's two cell values. The workbook is then written and closed.

Listing 1 continues by getting a workbook associated with output.xls and reading its contents. The getSheet() method provides access to the first sheet within this workbook. Its getCell() method is called to access the two cells, whose contents are then output.

Assuming that jxl.jar is located in the current directory, execute the following command to compile Listing 1:

javac -cp jxl.jar JExcelAPIDemo.java

Assuming success, execute the following command to run JExcelAPIDemo:

java -cp jxl.jar;. JExcelAPIDemo

You should observe the following output:

A label record 3.146

Figure 3 shows you output.xls in a LibreOffice context.

Figure 3. The solitary sheet displays two cell values

What's next?

La prossima volta vi presento una serie di puzzle che affrontano l'evoluzione delle librerie Java. Questi puzzle si concentrano sulla compatibilità del codice sorgente e binario tra i programmi client e le librerie che questi programmi utilizzano.

scarica Scarica il codice sorgente Ottieni il codice sorgente per le applicazioni di questo post. Creato da Jeff Friesen per JavaWorld

Il seguente software è stato utilizzato per sviluppare il codice del post:

  • JDK 7u6 a 64 bit
  • JExcelAPI 2.6.12

Il codice del post è stato testato sulle seguenti piattaforme:

  • JVM su Windows 7 SP1 a 64 bit

Questa storia, "Leggere e scrivere fogli di calcolo Excel" è stata originariamente pubblicata da JavaWorld.