Lorsque vous travaillez avec des fichiers Excel par programme, il est souvent souhaitable d'obtenir une liste de noms de feuille comme étape préliminaire dans l'analyse du contenu de la feuille. J'ai également rencontré une telle situation lors de la création de l'outil de comparaison de fichiers Excel "Square Diff" introduit dans Article précédent.
Dans cet article, je vais vous montrer trois façons d'obtenir une liste de noms de feuille dans un classeur Excel en Java:
Apache POI est une bibliothèque Java (et son projet) qui peut lire et écrire des fichiers au format Microsoft Office et est publiée par Apache Software Foundation sous la licence Apache 2.0. Vous pouvez l'utiliser en ajoutant la bibliothèque au chemin de construction. (La méthode est présentée à la fin de cet article.)
POI fournit l'API usermodel et l'API eventmodel, qui seront introduites ultérieurement. L'API usermodel sera votre premier choix lorsque vous travaillez avec Excel en Java.
[^ 1]: dans l'exemple de code présenté dans cet article, le traitement qui n'est pas lié à la ligne principale, comme le contrôle d'entrée, est omis en raison de la largeur du papier.
Exemple d'implémentation 1: SheetListerWithPOIUsermodelAPI.java
package mypackage;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
public class SheetListerWithPOIUsermodelAPI {
/**
*Renvoie une liste de noms de feuilles contenus dans le fichier Excel spécifié.
*
* @fichier de param fichier Excel
* @retour Liste des noms de feuilles
*/
public static List<String> getSheetNames(File file) throws Exception {
try (Workbook book = WorkbookFactory.create(file)) {
return IntStream.range(0, book.getNumberOfSheets())
.mapToObj(book::getSheetAt)
.map(Sheet::getSheetName)
.collect(Collectors.toList());
}
}
public static void main(String[] args) throws Exception {
List<String> sheetNames = getSheetNames(
new File("C:\\Users\\user01\\Desktop\\Liste des ventes de machines de jeu.xls"));
sheetNames.forEach(System.out::println);
}
}
Résultat d'exécution
Liste des ventes_2016
Graphique_2016
Liste des ventes_2017
Graphique_2017
Liste des ventes_2018
Graphique_2018
L'API du modèle d'utilisateur de POI doit d'abord lire et analyser l'intégralité du fichier Excel. C'est la partie de Workbook book = WorkbookFactory.create (file)
. Après cela, la liste des noms de feuilles est obtenue en utilisant Workbook # getNumberOfSheets ()
, Workbook # getSheetAt (int)
, Sheet # getSheetName ()
, etc. [^ 2]
L'exemple de code ci-dessus gère les fichiers au format .xls, mais les fichiers au format .xlsx / .xlsm peuvent également être traités.
[^ 2]: La documentation de l'API Apache POI est disponible ici: http://poi.apache.org/apidocs/index.html
Diverses API sont fournies pour un traitement transparent sans connaître le format de fichier (format .xls ou format .xlsx / .xlsm).
Les livres-feuilles-lignes-cellules, etc. sont modélisés dans le style orienté objet auquel les programmeurs Java sont habitués et peuvent être compris et manipulés intuitivement.
Étant donné que l'API usermodel doit d'abord charger et analyser l'intégralité du classeur Excel, même si vous souhaitez simplement obtenir le nom de la feuille, vous avez besoin de la quantité de mémoire et du temps de traitement en fonction du contenu de l'ensemble du fichier Excel. Cela peut être un goulot d'étranglement pratique.
L'API usermodel actuelle est loin d'être complète.
Par exemple, dans l'exemple de code ci-dessus, le nom de la feuille graphique est sorti en plus de la feuille de calcul. Cela est difficile si vous souhaitez simplement vous limiter au nom de la feuille de calcul. Ce serait bien d'avoir une API comme Sheet # isChartSheet
, mais ce n'est pas le cas.
L'interface / classe de gestion des feuilles Excel a la structure hiérarchique suivante.
Feuille: Interface pour une manipulation transparente de tous types de feuilles
├─ XSSFSheet : .xlsx/.feuille de format xlsm
│ └─ XSSFChartSheet : .xlsx/.Feuille graphique au format xlsm
│
└─ HSSFSheet : .feuille de format xls
Par conséquent, si le fichier Excel à traiter est au format .xlsx / .xlsm, vous pouvez exclure la feuille graphique en modifiant le code source comme suit.
Exemple de mise en œuvre 1-Kai
(Omis)
return IntStream.range(0, book.getNumberOfSheets())
.mapToObj(book::getSheetAt)
.filter(s -> !(s instanceof XSSFChartSheet)) //Ajoute ça
.map(Sheet::getSheetName)
.collect(Collectors.toList());
(Omis)
Cependant, il n'existe aucun moyen d'exclure les feuilles graphiques au format .xls [^ 3]. Si vous essayez de faire quelque chose d'un peu élaboré avec POI, vous serez accro à rencontrer de tels problèmes les uns après les autres.
Si ces lacunes ne sont pas un problème, l'API du modèle d'utilisateur POI peut être votre premier choix. Dans d'autres cas, vous devrez recourir à d'autres méthodes.
[^ 3]: Peut-être que je ne sais pas. Si vous le savez, laissez un commentaire.
L'API eventmodel est une fonctionnalité fournie pour lire des fichiers Excel rapidement et avec une petite quantité de mémoire, et l'écriture dans des fichiers n'est pas prise en charge.
L'API eventmodel lit le fichier Excel dans un sens du début à la fin et notifie à l'application le contenu du fichier sous la forme d'un événement. L'application effectue son propre traitement en fonction du contenu de l'événement.
«Square Diff» utilise cette méthode pour lire la liste des noms de feuille à partir d'un classeur Excel au format .xls. Voici un exemple d'implémentation lorsque vous travaillez avec un classeur Excel au format .xls.
Exemple de mise en œuvre 2-a:HSSFSheetListerWithPOIEventAPI.java
package mypackage;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.eventusermodel.HSSFEventFactory;
import org.apache.poi.hssf.eventusermodel.HSSFListener;
import org.apache.poi.hssf.eventusermodel.HSSFRequest;
import org.apache.poi.hssf.record.BoundSheetRecord;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class HSSFSheetListerWithPOIEventAPI {
private static class HSSFSheetListingListener implements HSSFListener {
private final List<String> sheetNames = new ArrayList<>();
@Override
public void processRecord(Record record) {
if (record.getSid() == BoundSheetRecord.sid) {
BoundSheetRecord bSheetRecord = (BoundSheetRecord) record;
sheetNames.add(bSheetRecord.getSheetname());
}
}
}
/**
*Renvoie une liste de noms de feuilles contenus dans le fichier Excel spécifié.
*
* @fichier de param fichier Excel
* @retour Liste des noms de feuilles
*/
public static List<String> getSheetNames(File file) throws Exception {
try (FileInputStream fis = new FileInputStream(file);
POIFSFileSystem poifs = new POIFSFileSystem(fis)) {
HSSFRequest req = new HSSFRequest();
HSSFSheetListingListener listener = new HSSFSheetListingListener();
req.addListenerForAllRecords(listener);
HSSFEventFactory factory = new HSSFEventFactory();
factory.abortableProcessWorkbookEvents(req, poifs);
return listener.sheetNames;
}
}
public static void main(String[] args) throws Exception {
List<String> sheetNames = getSheetNames(
new File("C:\\Users\\user01\\Desktop\\Liste des ventes de machines de jeu.xls"));
sheetNames.forEach(System.out::println);
}
}
Résultat d'exécution
Liste des ventes_2016
Graphique_2016
Liste des ventes_2017
Graphique_2017
Liste des ventes_2018
Graphique_2018
Exemple de mise en œuvre 2-b:HSSFSheetListerWithPOIEventAPI.java
package mypackage;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import org.apache.poi.hssf.eventusermodel.HSSFEventFactory;
import org.apache.poi.hssf.eventusermodel.HSSFListener;
import org.apache.poi.hssf.eventusermodel.HSSFRequest;
import org.apache.poi.hssf.record.BOFRecord;
import org.apache.poi.hssf.record.BoundSheetRecord;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class HSSFSheetListerWithPOIEventAPI {
private static class HSSFSheetListingListener implements HSSFListener {
private final Queue<String> queue = new ArrayDeque<>();
private final List<String> sheetNames = new ArrayList<>();
@Override
public void processRecord(Record record) {
switch (record.getSid()) {
case BoundSheetRecord.sid:
BoundSheetRecord bSheetRecord = (BoundSheetRecord) record;
queue.add(bSheetRecord.getSheetname());
break;
case BOFRecord.sid:
BOFRecord bofRecord = (BOFRecord) record;
switch (bofRecord.getType()) {
case BOFRecord.TYPE_WORKSHEET:
sheetNames.add(queue.remove());
break;
case BOFRecord.TYPE_CHART:
queue.remove();
break;
}
break;
}
}
}
//Après cela, exemple de mise en œuvre 2-Identique à un
/**
*Renvoie une liste de noms de feuilles contenus dans le fichier Excel spécifié.
*
* @fichier de param fichier Excel
* @retour Liste des noms de feuilles
*/
public static List<String> getSheetNames(File file) throws Exception {
try (FileInputStream fis = new FileInputStream(file);
POIFSFileSystem poifs = new POIFSFileSystem(fis)) {
HSSFRequest req = new HSSFRequest();
HSSFSheetListingListener listener = new HSSFSheetListingListener();
req.addListenerForAllRecords(listener);
HSSFEventFactory factory = new HSSFEventFactory();
factory.abortableProcessWorkbookEvents(req, poifs);
return listener.sheetNames;
}
}
public static void main(String[] args) throws Exception {
List<String> sheetNames = getSheetNames(
new File("C:\\Users\\user01\\Desktop\\Liste des ventes de machines de jeu.xls"));
sheetNames.forEach(System.out::println);
}
}
Résultat d'exécution
Liste des ventes_2016
Liste des ventes_2017
Liste des ventes_2018
Comme mentionné précédemment, l'API eventmodel de POI reçoit le contenu du fichier en tant qu'événement. Vous devez implémenter l'interface HSSFListener
et remplacer la méthode processRecord (Record)
pour recevoir des événements.
La méthode processRecord (Record)
est appelée à chaque fois que le fichier est lu, donc l'application traite en fonction du contenu de l'événement (en particulier, le contenu de l'objet Record
passé en argument).
Dans l'exemple d'implémentation 2-a, l'événement est record.getSid () == BoundSheetRecord.sid
, et dans l'exemple d'implémentation 2-b, record.getSid () == BoundSheetRecord.sid
ou record.getSid () == Traitement d'un événement BOFRecord.sid
.
Comprendre quels événements se produisent et dans quel ordre peut être une tâche ardue. Je peux voir la documentation de l'API pour l'interface d'enregistrement (http://poi.apache.org/apidocs/org/apache/poi/hssf/record/Record.html) et ses sous-interfaces et sous-classes, ainsi que le code suivant: J'ai progressivement approfondi ma compréhension en comparant le contenu réel de l'événement.
Sortez le contenu réel de l'événement et vérifiez
(Omis)
@Override
public void processRecord(Record record) {
System.out.println(record);
}
(Omis)
Notez que seuls les classeurs Excel au format .xls peuvent être traités par les exemples d'implémentation 2-a et 2-b. Il ne peut pas traiter les classeurs Excel au format .xlsx / .xlsm.
Étant donné que l'API eventmodel est une méthode de lecture du début à la fin d'un fichier avec un flux, elle fonctionne plus rapidement avec une petite quantité de mémoire par rapport à l'API usermodel, qui est une méthode d'analyse de l'ensemble du contenu du fichier et de le garder en mémoire. ..
Puisque le contenu du fichier peut être lu presque directement, il est possible de réaliser un traitement qui ne peut pas être réalisé par l'API du modèle utilisateur.
Afin de traiter avec l'API eventmodel, il est essentiel de comprendre la structure interne du fichier Excel, comme le type d'événements qui se produisent et dans quel ordre.
Il existe un livre de référence. "Kit de développement Microsoft Excel 97". Livres étrangers, épuisés. Au moment de la rédaction de cet article, [les livres d'occasion étaient répertoriés](https://www.amazon.co.jp/Microsoft-Excel-Developers-Kit-Customize/dp/1572314982/ref=sr_1_1?ie=UTF8&qid = 1530997082 & sr = 8-1 & mots-clés = 1572314982).
La documentation de l'API pour la classe d'implémentation Record
fait référence à ce livre. Par exemple, dans la documentation API pour la classe BoundSheetRecord
, consultez« REFERENCE: PG 291 Microsoft Excel 97 Developer's Kit. (ISBN: 1-57231-498-2) ". Lors de la création d'une application à part entière, vous devrez travailler avec un livre de référence dans une main.
J'ai procédé à l'implémentation tout en vérifiant la documentation de l'API et le contenu réel de l'enregistrement. Dans tous les cas, vous serez obligé de procéder à une implémentation par essais et erreurs.
Étant donné que l'API eventmodel ne lit le fichier qu'en ligne droite du début à la fin, s'il est nécessaire d'évaluer le contenu à l'avant du fichier en fonction du contenu à l'arrière du fichier, gérez et enregistrez vous-même le contenu du fichier. est nécessaire.
SAX signifie Simple API for XML et est fourni en tant qu'API standard en Java8 dans le package ʻorg.xml.sax`. Semblable à l'API eventmodel de POI, il lit le fichier XML dans une direction du début à la fin et notifie à l'application le contenu du fichier XML en tant qu'événement.
Comme on le sait, le fichier Excel au format .xlsx / .xlsm est en fait un fichier ZIP composé de plusieurs fichiers XML, vous pouvez donc utiliser SAX pour lire le contenu d'un classeur Excel.
«Square Diff» utilise cette méthode pour lire la liste des noms de feuille à partir d'un classeur Excel au format .xlsx / .xlsm.
Exemple de mise en œuvre 3-a:XSSFSheetListerWithSAX.java
package mypackage;
import java.io.File;
import java.io.InputStream;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
public class XSSFSheetListerWithSAX {
/**
*Sous forme de fichier zip.xlsx/.Lisez l'entrée suivante du fichier xlsm
*Extrayez la liste des noms de feuilles.
*
* *.xlsx
* +- xl
* +- workbook.xml
*/
private static class Handler1 extends DefaultHandler {
private final List<String> names = new ArrayList<>();
@Override
public void startElement(
String uri,
String localName,
String qName,
Attributes attributes) {
if ("sheet".equals(qName)) {
names.add(attributes.getValue("name"));
}
}
}
/**
*Renvoie une liste de noms de feuilles contenus dans le fichier Excel spécifié.
*
* @fichier de param fichier Excel
* @retour Liste des noms de feuilles
*/
public static List<String> getSheetNames(File file) throws Exception {
try (FileSystem fs = FileSystems.newFileSystem(file.toPath(), null)) {
Handler1 handler1 = new Handler1();
try (InputStream is = Files.newInputStream(
fs.getPath("xl/workbook.xml"))) {
InputSource source = new InputSource(is);
XMLReader parser = XMLReaderFactory.createXMLReader();
parser.setContentHandler(handler1);
parser.parse(source);
}
return handler1.names;
}
}
public static void main(String[] args) throws Exception {
List<String> sheetNames = getSheetNames(
new File("C:\\Users\\user01\\Desktop\\Liste des ventes de machines de jeu.xlsx"));
sheetNames.forEach(System.out::println);
}
}
Résultat d'exécution
Liste des ventes_2016
Graphique_2016
Liste des ventes_2017
Graphique_2017
Liste des ventes_2018
Graphique_2018
Exemple de mise en œuvre 3-b:XSSFSheetListerWithSAX.java
package mypackage;
import java.io.File;
import java.io.InputStream;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
public class XSSFSheetListerWithSAX {
/**
*Sous forme de fichier zip.xlsx/.Lisez l'entrée suivante du fichier xlsm
*Extrayez la liste des noms de feuilles et la carte des noms de feuilles et des ID de feuille (relId).
*
* *.xlsx
* +- xl
* +- workbook.xml
*/
private static class Handler1 extends DefaultHandler {
private final List<String> names = new ArrayList<>();
private final Map<String, String> nameToId = new HashMap<>();
@Override
public void startElement(
String uri,
String localName,
String qName,
Attributes attributes) {
if ("sheet".equals(qName)) {
names.add(attributes.getValue("name"));
nameToId.put(
attributes.getValue("name"),
attributes.getValue("r:id"));
}
}
}
/**
*Sous forme de fichier zip.xlsx/.Lisez l'entrée suivante du fichier xlsm
*Extrayez la carte de l'ID de feuille (relId) et du chemin d'entrée.
*
* *.xlsx
* +- xl
* +- _rels
* +- workbook.xml.rels
*/
private static class Handler2 extends DefaultHandler {
private final Map<String, String> idToSource = new HashMap<>();
@Override
public void startElement(
String uri,
String localName,
String qName,
Attributes attributes) {
if ("Relationship".equals(qName)) {
idToSource.put(
attributes.getValue("Id"),
attributes.getValue("Target"));
}
}
}
/**
*Renvoie une liste de noms de feuilles contenus dans le fichier Excel spécifié.
*
* @fichier de param fichier Excel
* @retour Liste des noms de feuilles
*/
public static List<String> getSheetNames(File file) throws Exception {
try (FileSystem fs = FileSystems.newFileSystem(file.toPath(), null)) {
Handler1 handler1 = new Handler1();
try (InputStream is = Files.newInputStream(
fs.getPath("xl/workbook.xml"))) {
InputSource source = new InputSource(is);
XMLReader parser = XMLReaderFactory.createXMLReader();
parser.setContentHandler(handler1);
parser.parse(source);
}
Handler2 handler2 = new Handler2();
try (InputStream is = Files.newInputStream(
fs.getPath("xl/_rels/workbook.xml.rels"))) {
InputSource source = new InputSource(is);
XMLReader parser = XMLReaderFactory.createXMLReader();
parser.setContentHandler(handler2);
parser.parse(source);
}
return handler1.names.stream()
.filter(name -> {
String id = handler1.nameToId.get(name);
String source = handler2.idToSource.get(id);
return source.startsWith("worksheets/");
})
.collect(Collectors.toList());
}
}
public static void main(String[] args) throws Exception {
List<String> sheetNames = getSheetNames(
new File("C:\\Users\\user01\\Desktop\\Liste des ventes de machines de jeu.xlsx"));
sheetNames.forEach(System.out::println);
}
}
Résultat d'exécution
Liste des ventes_2016
Liste des ventes_2017
Liste des ventes_2018
Afin de recevoir le contenu du fichier XML comme un événement, il est pratique d'hériter de ʻorg.xml.sax.helpers.DefaultHandler. Parmi les différentes méthodes de rappel fournies par la classe
DefaultHandler`, remplacez la méthode de rappel qui correspond à l'événement requis par votre application.
L'exemple de code ci-dessus utilise la méthode startElement (String, String, String, Attributes)
, qui est appelée à chaque fois que la balise de début d'un fichier XML apparaît.
Dans l'exemple d'implémentation 3-a, l'entrée «xl / workbook.xml» lorsque le fichier Excel est décompressé en tant que fichier zip est ajoutée, et dans l'exemple d'implémentation 3-b, l'entrée «xl / _rels / workbook.xml.rels» est ajoutée. Est en train de lire.
L'explication de la façon de les analyser sera longue, je vais donc l'omettre. En extrayant le fichier Excel au format .xlsx / .xlsm avec l'outil de décompression ZIP, vous pouvez facilement vérifier le contenu des fichiers XML qui composent le fichier Excel. Veuillez lire l'exemple de code ci-dessus tout en vérifiant le fichier Excel que vous avez.
Semblable à l'API eventmodel de POI, elle s'exécute rapidement et économise de la mémoire. De plus, il ne peut lire que les fichiers XML nécessaires qui composent un fichier Excel, ce qui le rend encore plus rapide.
Puisque le contenu du fichier peut être lu directement, il est possible de réaliser un traitement qui ne peut pas être réalisé par l'API du modèle utilisateur de POI.
ʻOrg.xml.sax` et ses sous-packages sont fournis en tant qu'API standard dans Java8. Pas besoin de compter sur des bibliothèques externes.
Comme pour l'API eventmodel de POI, une compréhension de la structure interne des fichiers Excel est essentielle. Cependant, la structure des classeurs Excel au format .xlsx / .xlsm est appelée Office Open XML et est normalisée ISO / CEI 29500. Par conséquent, il est relativement facile d'obtenir des informations de spécification. De plus, comme le contenu peut être facilement vérifié avec l'outil de décompression ZIP, on peut dire qu'il est plus facile à manipuler que de manipuler un classeur Excel au format .xls avec l'API eventmodel de POI.
Comme l'API eventmodel de POI, SAX ne lit le fichier XML qu'en ligne droite du début à la fin, donc si vous avez besoin d'évaluer le contenu à l'avant du fichier en fonction du contenu à l'arrière du fichier, Il est nécessaire de gérer et d'enregistrer le contenu du fichier avec.
Dans cet article, nous avons présenté les trois méthodes suivantes pour obtenir une liste de noms de feuilles inclus dans un fichier Excel en Java.
Chaque méthode a des avantages et des inconvénients, et nous, les programmeurs, devons les utiliser correctement en fonction de l'objectif.
J'ai moi-même contesté toutes les trois méthodes ci-dessus pour la première fois lorsque j'ai été confronté à la nécessité de créer "square Diff". En particulier, j'ai estimé que la méthode d'utilisation de l'API eventmodel et de SAX était un obstacle de taille, mais étonnamment, ce n'est pas si difficile une fois que vous le lancez, et c'est pratique une fois que vous vous y êtes habitué. Si vous essayez de surmonter la résistance initiale et de relever le défi, la plage de puissance de montage peut s'étendre.
«Square Diff» utilise également plusieurs méthodes pour mettre à jour les fichiers Excel. Je voudrais à nouveau introduire cela dans le manuscrit.
APPENDIX
Vous pouvez tirer parti de cette fonctionnalité en ajoutant certains des fichiers jar fournis par Apache POI à votre chemin de construction. Voici comment ajouter un fichier jar téléchargé manuellement à votre chemin de construction dans Eclipse. (Veuillez cliquer sur d'autres façons d'utiliser Maven, etc.)
De la Page de téléchargement du Site POI Apache au fichier zip (poi-bin-3.17 au moment de la rédaction de cet article) -20170915.zip) peuvent être téléchargés.
Décompressez le fichier zip n'importe où sur votre PC local. Je pense qu'il sera décompressé comme suit.
poi-3.17
├─ docs
│ └─ De nombreux fichiers html
│
├─ lib
│ ├─ commons-codec-1.10.jar
│ ├─ commons-collections4-4.1.jar
│ ├─ commons-logging-1.2.jar
│ ├─ junit-4.12.jar
│ └─ log4j-1.2.17.jar
│
├─ ooxml-lib
│ ├─ curvesapi-1.04.jar
│ └─ xmlbeans-2.6.0.jar
│
├─ LICENSE
├─ NOTICE
├─ poi-3.17.jar
├─ poi-examples-3.17.jar
├─ poi-excelant-3.17.jar
├─ poi-ooxml-3.17.jar
├─ poi-ooxml-schemas-3.17.jar
└─ poi-scratchpad-3.17.jar
A) Sélectionnez [Java]> [Build Path]> [User Library]> [New ...] dans les paramètres Eclipse.
B) Entrez le nom de votre choix, par exemple "poi-3.17" et appuyez sur OK.
C) Sélectionnez la bibliothèque utilisateur créée et cliquez sur [Ajouter un JAR externe ...].
D) Spécifiez le fichier jar inclus dans la décompression de 2. ci-dessus. Spécifiez également ce qui est contenu dans le dossier lib et le dossier ooxml-lib.
Il comprend des fichiers jar et des exemples de fichiers pour faire fonctionner Word et PowerPoint ainsi qu'Excel, et si vous utilisez uniquement des fichiers Excel, vous n'avez pas besoin de ces fichiers jar, mais bien, mettez-les tous. Cela ne devrait-il pas être bon?
E) Cliquez sur [Appliquer et fermer].
A) Sélectionnez le projet et sélectionnez Build Path> Add Library ... dans le menu contextuel.
B) Sélectionnez Bibliothèque utilisateur comme type de bibliothèque et spécifiez la bibliothèque utilisateur que vous avez créée précédemment comme cible.
c'est tout.
Recommended Posts