Lire et écrire des feuilles de calcul Excel

La communauté open source a créé de nombreux projets Java open source, qui vont des logiciels de cartographie aux frameworks de jeux en passant par les traitements de texte. Dans cet article, je présente un projet de bibliothèque open source pour lire et écrire des feuilles de calcul Microsoft Excel.

Recommander une bibliothèque de feuilles de calcul

Q: On m'a demandé d'étendre le logiciel de feuille de calcul Java de mon entreprise pour lire et écrire des feuilles de calcul Excel. Pouvez-vous recommander une bibliothèque Java open source qui m'aidera dans cette tâche?

R: Vous voudrez peut-être consulter JExcelAPI, qui est une bibliothèque open source basée sur Java mature qui vous permet de lire, d'écrire et de modifier des feuilles de calcul Excel. Voici quelques-unes de ses nombreuses fonctionnalités:

  • Lit les données des classeurs Excel 95, 97, 2000, XP et 2003
  • Lit et écrit des formules (Excel 97 et versions ultérieures uniquement)
  • Génère des feuilles de calcul au format Excel 2000
  • Prend en charge le formatage de la police, des nombres et de la date
  • Prend en charge l'ombrage des cellules, la bordure des cellules et la coloration des cellules
  • Modifie les feuilles de calcul existantes
  • Prend en charge la copie de graphiques
  • Prend en charge l'insertion et la copie d'images dans des feuilles de calcul

JExcelAPI a été développé par Andrew Kahn et a été publié sous la licence GNU Lesser General Public.

Téléchargement de la bibliothèque JExcelAPI

Q: Comment télécharger JExcelAPI?

R: Suivez les étapes suivantes pour télécharger JExcelAPI:

  1. Pointez votre navigateur vers le site SourceForge de JExcelAPI.
  2. Cliquez sur le jexcelapilien.
  3. Sur la page résultante, cliquez sur l'un des liens du dossier. Par exemple, j'ai cliqué sur le 2.6.12lien.
  4. Sur la page résultante, cliquez sur le nom de fichier de l'archive de distribution. Par exemple, j'ai cliqué sur le jexcelapi_2_6_12.ziplien.
  5. Après un court délai, votre navigateur devrait vous inviter à enregistrer ce fichier. Allez-y et enregistrez le fichier.

Après le téléchargement, désarchivez ce fichier. Vous devez observer un jexcelapirépertoire personnel dans un jexcelapi_2_6_12répertoire.

Démonstration de la bibliothèque JExcelAPI

Q: La bibliothèque JExcelAPI contient-elle des démos?

R: Le répertoire personnel de JExcelAPI jexcelapicontient un jxl.jarfichier qui contient des démos pour lire, écrire et copier des feuilles de calcul.

La démonstration de lecture lit une feuille de calcul existante, la convertissant au format de valeur séparée par des virgules (CSV) ou XML via l' option de ligne de commande -csvou -xml. Considérez les exemples suivants:

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

Ces exemples lisent budget.xlset sortent son contenu au format CSV et XML vers la sortie standard. Lorsque ni -csvni -xmln'est spécifié, -csvest supposé.

La démo d'écriture crée un exemple de feuille de calcul qui comprend des formules, des bordures, des images, etc. Cette feuille de calcul est générée en spécifiant l' -writeoption de ligne de commande, comme illustré ci-dessous:

java -jar jxl.jar -write sample.xls

La figure 1 montre une partie de la sample.xlsfeuille de calcul résultante .

Figure 1. J'ai utilisé LibreOffice Calc pour accéder à la feuille de calcul sample.xls

La démo copie copie un exemple de feuille de calcul jxlrwtest.xls, qui est stockée dans le même répertoire que jxl.jar, dans une nouvelle feuille de calcul. Dans la feuille de calcul résultante, la première feuille (originale) est inchangée tandis que la deuxième feuille (modifiée) contient des valeurs modifiées.

Cette démo est générée en spécifiant l' -rwoption de ligne de commande suivie de jxlrwtest.xlset du nom de la feuille de calcul de sortie. Considérez la ligne de commande suivante:

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

Cette ligne de commande copie jxlrwtest.xlsdans copy.xls. La figure 2 montre la deuxième feuille (modifiée) dans LibreOffice Calc.

Figure 2. Cliquez sur les onglets d'origine et modifiés pour afficher les feuilles d'origine et modifiées

Y compris JExcelAPI pour la compilation et l'exécution

Q: Comment puis-je inclure JExcelAPI lors de la compilation du code source et de l'exécution d'une application?

R: Pour inclure JExcelAPI lors de la compilation du code source et de l'exécution d'une application, effectuez l'une des opérations suivantes:

  • Ajoutez le fichier jexcelapidu jxl.jarrépertoire personnel à votre CLASSPATHvariable d'environnement.
  • Inclure jxl.jarvia l' option de ligne de commande du programme javacand .java-cp

Programmation avec JExcelAPI

Q: Comment créer des programmes Java qui exploitent JExcelAPI?

R: Le jexcelapirépertoire personnel comprend un tutorial.htmlfichier qui présente un didacticiel de base sur la programmation avec JExcelAPI. Le didacticiel vous montre comment lire, écrire et copier des feuilles de calcul. Le didacticiel traite également de la mise en forme.

jexcelapicomprend également un docssous - répertoire, qui donne accès à une documentation complète sur l'API. Pointez votre navigateur Web vers le index.htmlfichier de ce répertoire et vous pouvez explorer les types des quatre packages documentés de cette bibliothèque:

  • jxl: les types de paquets principaux
  • jxl.demo: types pour les différentes démos
  • jxl.format: types liés au formatage
  • jxl.write: types d'écriture dans une feuille de calcul

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 prochaine fois, je présenterai un ensemble de puzzlers qui traitent de l'évolution des bibliothèques Java. Ces énigmes se concentrent sur la compatibilité du code source et binaire entre les programmes clients et les bibliothèques utilisées par ces programmes.

télécharger Téléchargez la source Obtenez le code source des applications de cet article. Créé par Jeff Friesen pour JavaWorld

Le logiciel suivant a été utilisé pour développer le code postal:

  • JDK 7u6 64 bits
  • JExcelAPI 2.6.12

Le code de la publication a été testé sur la ou les plateformes suivantes:

  • JVM sur Windows 7 SP1 64 bits

Cette histoire, "Lire et écrire des feuilles de calcul Excel" a été publiée à l'origine par JavaWorld.