Apache POI est une API Java multiplateforme gratuite et open source écrite en Java. Apache POI offre la fonction des programmes Java pour lire et écrire des archives de format Microsoft Office.
Page de téléchargement du projet: http://poi.apache.org/download.html
Apache POI est une API Java qui crée et maintient diverses API Java conformes à la standard Office Open XML (OOXML) et au format de document composite OLE 2 de Microsoft (OLE2). Il peut être utilisé pour lire et créer et modifier les fichiers MS Excel à l'aide de Java. De plus, vous pouvez également utiliser Java pour lire et créer des fichiers MS Word et Mspowerpoint. Apache POI fournit une solution Java Operation Excel.
Exemple de lecture du document Excel
Nous utilisons HSSFWorkBook dans POI pour lire les données Excel.
public void test (fichier file) lève ioException {inputStream inp = new FileInputStream (fichier); HSSFWorkBook Workbook = new HSSFWorkBook (INP); // classeur ... opération de traversée} Le code ci-dessus montre qu'il est acceptable de lire le fichier d'Excel2003 (XLS), mais une fois que le fichier d'Excel2007 (XLSX) est lu, une exception sera signalée: "Les données fournies semblent être dans les documents Office 2007+.
Après avoir examiné les informations, la version Excel 2007 des fichiers Excel doit être lue à l'aide de XSSFWorkBook, comme suit:
public void test (fichier file) lève ioException {inputStream inp = new FileInputStream (fichier); XSSFWorkBook Workbook = nouveau XSSFWorkBook (INP); // classeur ... opération de traversée} Remarque: XSSFWorkBook nécessite une importation supplémentaire de poi-ooxml-3.9-source.jar et poi-ooxml-schemas-3.9.jar.
De cette façon, il n'y a aucun problème à importer Excel2007, mais une exception est signalée pour importer Excel2003.
Par conséquent, lors de l'importation Excel, essayez de juger la version d'Excel et appelez différentes méthodes.
J'ai pensé à utiliser le nom du suffixe de fichier pour déterminer le type, mais si quelqu'un modifie le suffixe de xlsx en xls, s'il utilise la fonction xlsx pour lire, le résultat est une erreur; Bien que le nom du suffixe soit correct, le codage du contenu du fichier et ainsi ne sont pas corrects.
Enfin, il est recommandé d'utiliser WorkbookFactory.Create (InputStream) dans POI-OOXML pour créer un classeur, car HSSFWorkBook et XSSFWorkBook implémentent l'interface de classeur. Le code est le suivant:
Classeur wb = workbookfactory.Create (IS);
Comme vous pouvez l'imaginer, dans la fonction WorkbookFactory.Create (), il doit y avoir un jugement sur le type de fichier. Jetons un coup d'œil à la façon dont le code source juge:
/ ** * Crée le HSSFWorkBook approprié / XSSFWorkBook à partir de * The Giving InputStream. * Votre flux d'entrée doit soit prendre en charge Mark / Reset, soit * être enveloppé comme un {@Link PushBackInputStream}! * / Public Static Workbook Create (InputStream Inp) lève IOException, InvalidFormatexception {// Si ne fait clairement pas marquer / réinitialiser, terminer if (! inp.markSupported ()) {inp = new PushBackInputStream (inp, 8); } if (poifsfilesystem.haspoifsheader (inp)) {return new hssfworkbook (inp); } if (POIXMLDocument.hasooxmlHeader (inp)) {return new XSSFWorkBook (opcpackage.open (inp)); } Jetez un nouveau IllégalArgumentException ("Votre InputStream n'était ni un flux OLE2, ni un flux OOXML"); }Vous pouvez voir que les objets de classeur appropriés sont créés séparément en fonction du type de fichier. Il est jugé sur la base des informations d'en-tête du fichier. Pour le moment, même si le nom du suffixe est modifié, il ne peut toujours pas être passé.