1. Introduction du concept
Apachepoi est une bibliothèque open source de l'Apache Software Foundation. POI fournit des API aux programmes Java pour lire et écrire des archives au format Microsoft Office.
2. Code lié à la fonction
1. Environnement Description: JDK1.7 + Tomcat7 + printemps
2. Configuration du fichier de configuration
Ajouter les dépendances POI requises dans le fichier POM
<! - Ajouter le support POI -> <dependency> <proupId> org.apache.poi </proncId> <Artifactid> poi </ artifactive> <version> 3.13 </ version> </dependency> <dependency> <proupId> org.apache.poi </proupId> <Artifactid> Poi-ooxml </artifactid>
Spring-mvc.xml Fichier de configuration du fichier
<bean id = "MultipartreSolver"> <! - Encoding par défaut -> <propriété name = "Defatenceding" value = "utf-8" /> <! - Valeur de taille de fichier maximale -> <propriété name = "maxuploadSize" value = "10485760000" /> <! - Value maximum dans la mémoire -> <propriété = "maxinMemorySize" Value = "40960"
3. Classes d'outils et rédaction de code connexes
Classe d'outils d'analyse Excel (importExceLutil.java)
package com.jointem.hrm.utils; import org.apache.poi.hssf.usermodel.hssfworkbook; import org.apache.poi.ss.usermodel.cell; import org.apache.poi.sermodel.sheet; import org.apache.poi.ss.usermodel.workbook; import org.apache.poi.ss.util.cellrangeaddress; import org.apache.poi.xssf.usermodel.xssfworkbook; import java.io.ioexception; import java.io.inputStream; import java.tex java.text.simpledateFormat; import java.util.arraylist; import java.util.list; / ** * créé par Jenking le 2017/9/8. * / classe publique importExceLutil {chaîne statique finale privée Excel2003l = ". xls"; // 2003- Version d'Excel private final static String Excel2007u = ". Xlsx"; // 2007 + version d'Excel / ** * Description: Obtenez les données dans le flux IO et assemblez-la dans une liste <list <objet> objet * @param in, fichier * @return * @throws ioException * / public list <list <objet >> getBankListbyExcel (inputStream in, string filename) lance exception {list <object>> list = null; // Créer Excel Workbook Work = this.getworkbook (in, nom de fichier); if (null == work) {lancer une nouvelle exception ("Créer une feuille de calcul Excel comme vide!"); } Feuille de feuille = null; Row Row = NULL; Cell Cell = NULL; list = new ArrayList <list <objet >> (); // Tranquility Toutes les feuilles dans Excel pour (int i = 0; i <work.getNumberOfSheets (); i ++) {sheet = work.getSheetAt (i); if (sheet == null) {continue;} // transmettra toutes les lignes dans la feuille actuelle System.out.println (sheet.getSastrownum ()); pour (int j = sheet.getFirstrownum (); j <= sheet.getSastrowm () - 11; j ++) {row = sheet.getRow (j); // if (row == null || row.getFirstCellnum () == j) // {// continent; //} // traverst toutes les colonnes Liste <objet> li = lis for (int y = row.getFirstCellnum (); y <row.getlastCellnum (); y ++) {cell = row.getCell (y); if (this.ismergedRegion (feuille, j, y)) {li.add (this.getMergedRegionValue (feuille, j, y)); } else {li.add (this.getCellValue (Cell)); }} list.add (li); }} work.close (); Liste de retour; } / ** * Description: Selon le suffixe de fichier, la version du fichier téléchargé de manière adaptative * @param instlin, nom de filen * @return * @throws exception * / public workbook getworkbook (inputStream instr, string filename) lève exception {workbook wb = null; String fileType = filename.SubString (filename.LastIndexof (".")); if (excel2003l.equals (fileType)) {wb = new hssfworkbook (instr); // 2003-} else if (excel2007u.equals (fileType)) {wb = new xssfworkbook (instant); // 2007 +} else {lancer une nouvelle exception ("Le format de fichier analysé est incorrect!"); } return wb; } / ** * Description: Formater les valeurs du tableau * @param cell * @return * / objet public getCellValue (Cell Cell) {objet Value = Null; Decimalformat df = new Decimalformat ("0"); // Numéro de format Caractère de chaîne SimpledateFormat sdf = new SimpledateFormat ("yyy-mm-dd"); // Date Format decimalformat df2 = new Decimalformat ("0"); // Format Number Switch (Cell.getCellType ()) {Case Cell.Cell_Type_String: Value = Cell.getRichStringCellValue (). GetString (); casser; case Cell.Cell_Type_Numeric: if ("General" .Equals (Cell.getCellStyle (). GetDataFormatString ())) {value = df.format (Cell.GetNumericCellValue ()); } else if ("m / d / yy" .equals (Cell.getCellStyle (). GetDataFormatString ())) {value = sdf.format (cell.getDateCellValue ()); } else {value = df2.format (cell.getNumericCellValue ()); } casser; case Cell.Cell_Type_Boolean: Value = Cell.getBoolEanCellValue (); casser; case cell.cell_type_blank: value = ""; casser; par défaut: pause; } RETOUR-valeur; } / ** * Obtenez le contenu de la cellule fusionnée * @Param Sheet * @param row * @param colonne * @return * / objet public getMergedRegionValue (feuille de feuille, ligne int, colonne int) {int sheetmerCount = sheet.getNummerGegeGions (); pour (int i = 0; i <sheetmerCount; i ++) {CellRangaaddress ca = sheet.getMerGeDregion (i); int premier FirstColumn = CA.GetFirstColumn (); int lastColumn = ca.GetLastColumn (); int FirStrow = CA.GetFirStrow (); int lastrow = ca.GetLastrow (); if (row> = firStrow && row <= lastrow) {if (colonnel> = firstColumn && colonnes <= lastColumn) {row frow = sheet.getRow (firstrow); Cell fCell = frow.getCell (FirstColumn); Renvoie ce.getCellValue (FCell); }} return null; } / ** * Déterminez s'il s'agit d'une cellule fusionnée * @param sheet * @param row * @param colonne * @return * / public boolean ismergedRegion (feuille de feuille, ligne int, colonne int) {int sheetmerCount = sheet.getNummergedRegions (); for (int i = 0; i <sheetmerCount; i ++) {CellRangeAddress range = sheet.getMergedRegion (i); int premiersColumn = range.getFirstColumn (); int lastColumn = range.getlastColumn (); int FirStrow = range.getFirStrow (); int lastrow = range.getLastrow (); if (row> = firStrow && row <= lastrow) {if (colonnel> = firstColumn && colonnes <= lastColumn) {return true; }}} return false; }} Contrôleur de demande (Page de processus Excel Import Demande)
package com.poiexcel.Control; import java.io.inputStream; import java.io.printwriter; Importer java.util.list; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import org.springframework.sterreotype.Controller; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multupar.MultiPartFile; import org.springframework.web.multupar.MultiparthTTPServletRequest; import com.poiexcel.util.impportexcelutil; import com.poiexcel.vo.infovo; @Controller @RequestMapping ("/ upLoadexcel / *") classe publique UpLoadexcelControl {/ ** * Description: Importer un fichier Excel via la soumission de formulaire traditionnelle * @param request * @throws exception * / @requestmapping (value = "upload.do", méthode = {requestMethod.get, requestMethod.Post}) lève une exception {multipartHTTPServLetRequest multipartReQuest = (multipartHTTPServLetRequest) Request; InputStream dans = null; List <list <object>> listoB = null; MultipartFile File = multipartReQuest.getFile ("upfile"); if (file.isempty ()) {lancer une nouvelle exception ("Le fichier n'existe pas!"); } dans = file.getInputStream (); listoB = new ImportExceLutil (). GetBankListByExcel (dans, file.getoriginalFileName ()); joindre(); // La méthode de service correspondante peut être appelée ici pour enregistrer les données dans la base de données. Maintenant, seules les données sont sorties pour (int i = 0; i <listOb.size (); i ++) {list <objet> lo = listOb.get (i); Infovo vo = new infovo (); vo.setcode (string.valueof (lo.get (0))); vo.setName (string.valueof (lo.get (1))); vo.setDate (string.valueof (lo.get (2))); vo.setmoney (string.valueof (lo.get (3))); System.out.println ("Imprimer des informations -> institution:" + vo.getcode () + "Name:" + vo.getName () + "Time:" + vo.getDate () + "Asset:" + vo.getMoney ()); } return "result"; } Code frontal
Le frontal utilise le composant de téléchargement de fichiers FileInput de Bootstrap et doit introduire FileInput.css, fileInput.js, zh.js, bootstrap.css, bootstrap.js, jquery.min.js
<body> <h4> Entrée d'informations de présence </h4> <form méthode = "post" enctype = "multipart / form-data" id = "form1" action = "$ {pageContex $ ('# file-zh'). fileInput ({language: 'zh', uploadUrl: '$ {pageContext.request.contextPath} / présence / upLoadexcel', autorisation autorisée: [xls ',' xlsx ']}); </ script> Objet vo, enregistrez l'objet correspondant des données Excel
package com.poiexcel.vo; // convertir chaque ligne d'Excel en une classe publique d'objet Infovo {Code de chaîne privé; nom de chaîne privé; Date de chaîne privée; argent de cordes privées; public String getcode () {return code; } public void setCode (String code) {this.code = code; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public String getDate () {date de retour; } public void setDate (String Date) {this.date = date; } public String getMoney () {return money; } public void setMoney (String Money) {this.money = money; }}3. Affichage d'effet
1. Affichage de la page
2. Informations sur le backend imprimées
4. Résumé
Cet exemple ne produit que les données importées dans la console et ne persiste pas. Si vous voulez persister, appelez simplement la couche de service au lieu de commentaire
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.