Le projet doit analyser les documents Excel pour obtenir des données, j'ai donc trouvé des informations en ligne, et combinée à mon utilisation cette fois, et j'ai noté mon expérience:
1. Les dépendances suivantes sont nécessaires pour le projet Maven:
<dependency> <proupId> org.apache.poi </rompuprid> <letifactive> poi </ artifactId> <DERVIÈRE> 3.10-FINAL </ Version> </Dependency> <Dedency> <ProupId> org.apache.poi </proupId> <ArtifActid> poi-oooxml </ artifactid> <version> 3.10-Final </ version>
Accédez directement à la classe de test, avec des annotations complètes dans la classe:
package shindo.java; import java.io.fileInputStream; import java.io.inputStream; import java.util.arraylist; import java.util.list; import org.apache.poi.hssf.usermodel.hssfcell; import org.apache.poi.hssf.Usmodel.hssfrow; org.apache.poi.hssf.usermodel.hssfworkbook; import org.apache.poi.ss.usermodel.cell; import org.apache.poi.xssf.usermodel.xssfcell; import org.apache.poi.xssf.usermodel.xssfrow; Import; org.apache.poi.xssf.usermodel.xssfsheet; import org.apache.poi.xssf.usermodel.xssfworkBook; classe publique Excelutil {public static void main (string [] args) {String Path = "d: //ide//workspace-neon//java//src/refund.x"; essayez {list <list <string>> result = new Excelutil (). readxls (path); System.out.println (result.size ()); for (int i = 0; i <result.size (); i ++) {list <string> modèle = result.get (i); System.out.println ("OrderNum:" + Model.get (0) + "-> OrderAmount:" + Model.get (1)); }} catch (exception e) {e.printStackTrace (); }} / ** * * @title: readxls * @description: traitement des fichiers xls * @param @param path * @param @return * @param @throws exception set fichier * @return list <list <string>> return type * @throws * * Il n'est pas difficile de trouver sa logique de traitement à partir du code: * 1. Utiliser d'abord InputStream pour obtenir le stream IO du Fichier Excel *. Puis dans l'excaire InputStream pour obtenir le stream io Fichier HSSFWorkBook Type Object, qui représente l'intégralité du fichier Excel. * 3. Loop pour chaque page de ce fichier Excel * 4. Boucle pour chaque ligne de chaque page * 5. Traitez chaque cellule de chaque ligne pour obtenir la valeur de cette cellule * 6. Ajoutez le résultat de cette ligne à un tableau de liste * 7. = new FileInputStream (Path); // HSSFWorkBook identifie l'intégralité du HSSFWorkbook HSSFWorkBook = new HSSFWorkBook (IS); List <list <string>> result = new ArrayList <list <string >> (); int size = hssfworkbook.getNumberOfSheets (); // Loop chaque page et traiter la page de boucle actuelle pour (int numsheet = 0; numSheet <size; numSheet ++) {// hssfsheet identifie une certaine page hssfsheet hssfsheet = hssfworkbook.getSheetETAT (numSheet); if (hssfSheet == null) {continuant; } // Traitez la page actuelle et lisez chaque ligne pour (int rownum = 1; rownum <= hssfsheet.getSastRowm (); rownum ++) {// hssfrow représente la ligne hssfrow hssfrow = hssfSheet.getRow (rownum); int mincolix = hssfrow.getFirstCellnum (); int maxColix = hssfrow.getlastCellnum (); List <string> rowList = new ArrayList <string> (); // Traversal et modifie les lignes pour obtenir le traitement de chaque élément de cellule pour (int colix = minColix; colix <maxColix; colix ++) {// hssfCell représente la cellule HSSFCell Cell = hssfrow.getCell (colix); if (cell == null) {continuer; } rowList.add (getStringVal (cellule)); } result.add (rowList); }} Retour Résultat; } / ** * * @title: readxlsx * @description: traitement des fichiers xlsx * @param @param path * @param @return * @param @throws exception setting fichier * @return list <list <string >> return type * @throws * / private list <list <string >> readxlsx (String path) exception {EntingStream is = newfing fileIntStream (path); thring laste exception {EntingStream is = New FileIntStream (path); XSSFWorkBook XSSFWorkBook = nouveau XSSFWorkBook (IS); List <list <string>> result = new ArrayList <list <string >> (); // boucle chaque page et traiter la page de boucle actuelle pour (xssfsheet xssfsheet: xssfworkbook) {if (xssfsheet == null) {continu; } // Traitez la page actuelle et lisez chaque ligne pour (int rownum = 1; rownum <= xssfsheet.getLastRowm (); rownum ++) {xssfrow xssfrow = xssfsheet.getRow (rownum); int mincolix = xssfrow.getFirstCellnum (); int maxColix = xssfrow.getlastCellnum (); List <string> rowList = new ArrayList <string> (); for (int colix = minColix; colix <maxColix; colix ++) {xssfcell cell = xssfrow.getCell (colix); if (cell == null) {continuer; } rowList.add (Cell.ToString ()); } result.add (rowList); }} Retour Résultat; } // Problèmes existants / * * En fait, parfois les données que nous voulons obtenir sont les données dans Excel, mais en fin de compte, on constate que le résultat n'est pas idéal * Si les données de votre Excel sont un nombre, vous constaterez que celui correspondant en Java est devenu une méthode de notation scientifique. * Ainsi, lorsque vous obtenez des valeurs, vous devez effectuer un traitement spécial pour vous assurer d'obtenir les résultats souhaités. L'approche en ligne consiste à formater des données numériques pour obtenir les résultats que vous souhaitez. * Ce qui suit est une autre méthode. Avant cela, jetons un coup d'œil à la méthode toString () dans POI: * * Cette méthode est la méthode POI. À partir du code source, nous pouvons constater que le flux de traitement est: * 1. Obtenez le type de cellule * 2. Formater les données en fonction du type et la sortie. Cela crée beaucoup de choses que nous ne recherchons pas *, donc nous faisons une transformation de cette méthode. * / / * public String toString () {switch (getCellType ()) {case cell_type_blank: return ""; Case Cell_Type_Boolean: Return getBooleanCellValue ()? "Vrai": "False"; case cell_type_error: return erroreval.getText (getErrEllValue ()); case cell_type_formula: return getCellFormula (); case cell_type_numeric: if (dateUtil.iscellDateFormatted (this)) {dateFormat sdf = new SimpledateFormat ("dd-mmm-yyy") return sdf.format (getDateCellValue ()); } return getNumericCellValue () + ""; Case Cell_type_string: return getrichStringCellValue (). toString (); Par défaut: renvoie "Type de cellule inconnu:" + getCellType (); }} * / / ** * La méthode de reconstruction du toString () par défaut de POI est la suivante * @Title: getStringval * @description: 1. Pour les types inconnus, ou vide, retourne "" Control String * 2. Si c'est un numéro, modifiez le type de cellule à chaîne et retourne la chaîne, de sorte que le nombre n'est pas formaté * @Param @Param Cell * @Param @rerurn setrenTr Type de retour * @Throws * / public static String getStringVal (HSSFCell Cell) {Switch (Cell.getCellType ()) {Case Cell.Cell_Type_Boolean: return Cell.getBooleanCellValue ()? "Vrai": "False"; case Cell.Cell_Type_Formula: return Cell.getCellFormula (); case Cell.Cell_Type_Numeric: Cell.SetCellType (Cell.Cell_Type_String); return Cell.getStringCellValue (); case Cell.Cell_Type_String: return Cell.getStringCellValue (); par défaut: return ""; }}}Résumer
Ce qui précède est tout le contenu de cet article sur l'utilisation du package POI pour lire le code de document Excel dans Java. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!