Dieser Artikel teilt den Batch -Import von Excel -Tabellendaten in Java für Ihre Referenz. Der spezifische Inhalt ist wie folgt: importieren Sie java.awt.color; importieren java.io.BytearrayInputStream; importieren java.io.BytearrayoutputStream; Import Java.io.file; import Java.io.FileInputStream; importieren java.io.inputstream; Import Java.lang.reflect.field; Java.Text.DateFormat importieren; importieren java.text.decimalformat; Java.Text.SimpledateFormat importieren; import Java.util.*; importieren javax.swing.text.attributeset; import javax.swing.text.element; import Javax.swing.text.html.css; importieren javax.swing.text.html.htmldocument; import javax.swing.text.html.htmleditorkit; importieren cn.vrview.dev.common.exception.BusinessException; import org.apache.commons.lang3.stringutils; import org.apache.logging.log4j.logmanager; import org.apache.logging.log4j.logger; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.hssf.util.hssfcolor; import org.apache.poi.s.usermodel.*; import org.apache.poi.s.util.cellrangeaddress; import org.apache.poi.xssf.usermodel.xssfcolor; import org.apache.poi.xssf.usermodel.xssffont; import org.apache.poi.xssf.usermodel.xssfworkbook; import org.springframework.web.util.htmlutils; importieren cn.vrview.dev.common.util.StringUtil; public class exceltools { / ** log* / private static logger log = logManager.getLogger (); /** * Export excel * <p> * Usage: <br> * <code> List<Map<String, Object>> dataList = new ArrayList<Map<String,Object>>();<br> * is = ExcelTools.exportXLS(dataList,new String[] {"createTime:Date","name:Name", "sex:Gender", "remark:Remark"}); * </ code> * * @param sammeln * Datenerfassung, die exportiert werden soll HSSFWorkbook Book = new HSSFWorkbook (); Versuchen Sie {// Fügen Sie ein Blatt Hssfsheet Sheet = book.createSheet ("Sheet1"); // Definieren Sie die Set der zu exportierten Spaltennamen, die <string> spalten = new Hashset <string> (); // Setzen Sie die Zellhintergrundfarbe HSSFCellStyle CellStyle = book.CreateCellStyle (); CellStyle.SetFillPattern (hssfcellStyle.solid_foreground); CellStyle.SetFillforegroundColor (New HSSFColor.yellow (). getIndex ()); // Header HSSfrow Row = Sheet.Createrow (0) erzeugen; Hssfcell cell = row.createcell (0); Cell.SetCellStyle (CellStyle); cell.setCellValue ("Sequenz"); // Die Spaltennummer startet mit 1 int n = 1; // Header String für (String str: Header) {String [] arr = str.split (":"); columns.add (n + "," + arr [0]); // den Feldnamen zum Exportieren und Binden an die Spaltennummer n Cell = row.createCell (n) hinzufügen; Cell.SetCellStyle (CellStyle); cell.setCellValue (arr [1]); n ++; } // Datenzeilen ab 1 generieren, 0 ist der Header int i = 1; // Datenzeilen für (MAP <String, Objekt> Karte: sammeln) {hsssfrow datarow = Sheet.Createrow (i); // generieren Sie die Sequenznummer datarow.createcell (0) .setCellValue (i); // andere Spalten für (Stringspalte: Spalten) generieren {// Verwenden Sie Kommas, um den Feldnamen zu erhalten. [0] ist die Spaltennummer, die dem Header -Header entspricht. String columnName = column.split (",") [1]; // generieren Sie die Sequenznummernspalten -Zelle = datarow.createCell (Integer.ParseInt (column.split (",") [0])); String value = ""; value = map.get (columnName) + ""; // konvertieren in "" if ("null" .equals (value)) {value = ""; } RichTextString RichTextString = processHtml (Buch, Wert); cell.getCellStyle (). setWrapText (false); cell.setCellValue (RichTextString); } i ++; } book.write (out); out.close (); } catch (Ausnahme e) {e.printstacktrace (); } return New BytearrayInputStream (out.tobytearray ()); } /** * Get Excel -Dateidaten <br> * Verwendung: <br> * SheetInfo SheetInfo = new exceltools (). New SheetInfo (); <br> * SheetInfo.setRowtitle (0); List <String> Sheets = New ArrayList <String> (); <br> * String SheetName = "Sheet1"; Sheets.Add (SheetName); <br> * SheetInfo.SetsheetNames (Blätter); <br> * sheetInfo.setColumnsMapping(new String[] { "prodName:Product Name", * "prodSpec:Specification", "collectPrice:Price:" + {@link RegExpEnum} * RegExpEnum.NOTEMPTY_ISNUMBER, "priceUnit:Unit", "collectMarket:quotation market", * "prodLevel:level" }); <br> * map <String, Liste> data = exceltools.getExcel (neue Datei (Pfad), SheetInfo); * * @param * * @param sheetInfo * Initialization information* @return Map {sheet1:List} * @throws Exception * Exception */ @SuppressWarnings("rawtypes") public static Map getExcel(File f, SheetInfo sheetInfo, String excelType) throws Exception { return getExcel(new FileInputStream(f), sheetInfo, excelType); } @SuppressWarnings ({"rawtypes", "deaktiviert"}) public static map getExcel (InputStream in, SheetinFo SheetInfo, String exceltType) löst eine Ausnahme aus {map <string, string> columnsmap = new Hashmap <string> (); // Spalte Verifizierungsausdruckskarte Liste <string> errmsg = new ArrayList <string> (); int errnum = 0; // Gesamtzahl der Fehler int errlimit = 10; // Begrenzen Sie die Anzahl der Fehlereingaben/ ** zum Speichern aller Inhalte, die Excel gemäß den angegebenen Regeln*/ map excelinfo = new HashMap () liest; Arbeitsbuchbuch = NULL; try {if (excelType.equals ("xls")) {book = new HSSFWorkbook (in); // Neue BusinessException werfen ("Excel -Version ist zu niedrig, bitte verwenden Sie Version 2007 oder höher (Erweiterung: xlsx)"); } else {book = new XSSFWorkbook (in); }} catch (outofMemoryError e) {Neue RunTimeException werfen ("Die aktuelle Excel -Datei ist zu groß. Bitte prüfen Sie, ob in jeder Blatt Tabelle ungültige leere Daten vorhanden sind, einschließlich Zeilen- und Spaltendaten mit Format und Wireframe, bitte löschen Sie diese ungültigen Daten! Normale Excel -Dateigröße [innerhalb von 1M]"); } // Checktitle (Buch, SheetInfo); // Erhalten Sie die Anzahl der Arbeitsblätter int Sheetnum = SheetInfo.getsheetNames (). Size (); // Alle Arbeitsblätter schleifen und die Daten innerhalb von (int SheetIndex = 0; Karte <String, String> validatemap = new HashMap <String, String> (); für (String mapstr: SheetInfo.getColumnSmapPing (). get (SheetName)) {String [] arr = mapstr.split (":"); columnsmap.put (arr [1], arr [0]); if (arr.length == 3) {// Wenn der Überprüfungsausdruck nicht leer ist, fügen Sie ihn der Karte zu validatemap.put (arr [1], arr [2]) hinzu; }} Sheet = book.getSheet (SheetName); if (null == Sheet) {neue runTimeexception (string.format ("Die Tabelle nicht erhalten, bitte bestätigen Sie, ob das Blatt"%s "in Excel", Sheetname)); } // zum Speichern des Dateninhalts in der Arbeitsblattliste SheetList = new ArrayList (); // Die Anzahl der Zeilen in der aktuellen Tabelle int Zeilen = Sheet.GetLastrownum () erhalten; // Die Anzahl der Spalten in den aktuellen Tabellen -Int -Spalten = Sheet.getRow (SheetInfo.getRowtitle ()) erhalten. GetLastcellnum (); if (Zeilen <= SheetInfo.getrowtitle ()) {// Wenn die aktuelle Tabelle nicht über die erforderlichen Daten verfügt, setzen Sie die nächste Schleife fort; } // Erhalten Sie den aktuellen Arbeitsblatt -Titel -Inhaltsliste <string> Titlelist = new ArrayList <string> (); // Jede Zelle in jeder Zeile schleifen und den Wert in der Zellzeile Titlerow = Sheet.getRow (SheetInfo.getRowtitle ()) lesen; für (int jj = 0; jj <columns; jj ++) {Cell Celltitle = Titlerow.getCell (jj); if (CellTitle! = null) {int row = celltitle.getRowIndex (); int column = celltitle.getColumnIndex (); if (isMergedRegion (Blatt, Zeile, Spalte) {Titlelist.Add (getMergedRegionValue (Blatt, Zeile, Spalte)); } else {titlelist.add (getCellValue (CellTitle)); }} else {town runTimeException ("Tabellenheader -Lesefehler, derzeit auf" Th " + (SheetInfo.GetRowtitle () + 1) +" Zeile <br/> Der Inhalt des Tischkopfs ist: " + Titlerow +", bitte überprüfen Sie, ob es richtig ist. System.out.println (Titlelist); (StringUtils.DeletwhitePace (t) .EqualSignoreCase (Colarr [1]) {include = true; für (int i = SheetInfo.getrowtitle () + 1; i <= Zeilen; i ++) {MAP RowMap = New HashMap (); J <Spalten; columnSmap.keyset ()) {if (Stringutils.deletwhitespace (columntitle) .EqualSignoreCase (Titel) {columnMapping = columnsmap.get (title); // Cell -Hintergrundfarbe (exceltype.equals ("xls") {hssfcolor color = (hssfcolor) Cellstyle.GetFillforecroundColorColor (); Xssfcolor color = (xssfcolor) cellstyle Zelle); rowspan+columnMapping+"-"+value+"-"+(mergrow+1)); cell.getCellComment (). GetString ()); Regexpenum.ValueOf (validatemap.get (Spaltentitel)); Errnum ++; } else {// int row = cell.getRowIndex (); }}} SheetList.Add (RowMap); Template -Daten sind korrekt! ");} Wirf eine neue RunTimeException (Errmsg.toString (). Ersatz (" // [| //] "," ");} // if (true) neue RunTimeException (" Test "); Map <string, spaltenmap = neuer Hashmap <String, String> (); SheetInfo.GetColumnSmaping (). Alle Inhalte speichern, die nach den angegebenen Regeln ausgerichtet sind*/ listen Sie Excelinfo = New ArrayList (); SheetNum; Sheet. BusinessException ("Das Dateiformat ist falsch, bitte leiten Sie die Vorlage erneut aus oder laden Sie die Vorlage herunter); ArrayList <string> (); Für (String S: Titel) {// Wenn der Tabellenkopf in der Excel -Tabelle das Feld fehlt, ist (! Titlelist Template ");}} // Starten Sie jede Zeile, lesen Sie den Wert jeder Zeile und lesen aus der Zeile unter dem Titel (int i = SheetInfo.getrowtitle ()+1; i <= Zeilen; i ++) {MAP RowMap = New Hashmap (); Row datarow = Blatt. jede Zeile und den Wert in der Zellstring -Spalte = Titlelist (j); validateRegmsg = ""; (! StringUtils.isempty (validateReg) {if (value.matches (validateReg)) {rowMap.put (columnMapping, value); Übereinstimmung! if (errnum> errlimit) {// errmsg.add ("Die von Ihnen importierte Datenvorlage ist zu viel Format (Total" + Errnum + "S), prüfen Sie, ob die Template -Daten korrekt sind!"); / **** für Excel-Operationen verwendet, Tabelleninitialisierungsinformationen** @Author: ji le* @date: 2013-12-2 1:43:04 PM* @Since: 1.0* / public class sheetinfo Karte <String, String []> Spaltenmapping; this.sheetnames.add ("Sheet1"); {return rowtitle; } publiclist <string> GetsheetNames () {return SheetNames; leer*/notieren Sie sich nicht leer "(?!+$). {return text; @SuppressWarnings ("Unbenutzt") privates statisches Richtextstring proceshtml (HSSFWORKBOOK WB, STRING HTML) {RICHTEXTSTRING RT = NULL; doc.getLength (), html, 0, 0, null); = line.getEnset (); sb.Append (subtext); line.getEnset (); } catch (Ausnahme E) {log.warn (e.getMessage ()); WB.CreateIn (); AS.Getattribute (Attribut) .GetClass (). HSSFFONT && WB Instance von HSSFWORKBOOK) {HSSFPALETTE PAL = (HSSFWORKBOOK) WB) .GETCUSTOMPALETE (); font) .setColor (col.getIndex ()); GetMerged Regionrow (Blattblatt, Zellzelle) {// Erhalten Sie, wie viele zusammengeführte Zellen int SheetmergerCount = Sheet. FirstC = ca.GetFirstColumn (); (cell.getRowIndex () == firstr) {return lastr - firstr; = 0 SheetmerCount; Lastrow) {if (Spalte> = FirstColumn && Spalte <= lastColumn) {Row frow = Sheet.getrow (Firstrow); Spalte * @return */ public boolean ismergedregion (Blattblatt, int Spalte) {int SheetmerGeCount = Sheet.GetNummergedRegions (); = Bereich.getLastColumn (); * @return */ @SuppressWarnings ("unbenutzt") privat boolean hasmerged (Blatt) {return Sheet. @Suppresswarnings ("unbenutzt") Private void Mergeregion (Blattblatt, Int Firstrow, int Lastrow, int FirstCol, int lastcol) {schälen getCellValue (Cell Cell) {if (cell == null) return ""; String.ValueOf (cell.getBooleancellValue ()); {// Datumsformat und Zeitformat SimpleDateFormat SDF = new SimpleDateFormat ("yyyy-mm-dd"); Monatsdatum (durch Beurteilung der Format-ID der Zelle ist 3 1) SimpleDateFormat SDF = New SimpleDateFormat ("Yyyy-MM-DD"); String.Valueof (SDF.Format (Datum); Str.Replace (String.Valueof ((char) 160), "). System.out.println (neuer XSSFColor (color.yellan) .getArgbhex (). Substring (2)); RGB [0], G = RGB [1], B = RGB [2]; = "B"; rsstring = "b"; 16; String.Valueof (grün); = "F"; "D"; 13) BSString = "D"; Schauen Sie sich die Seite von.jsp erneut an
<body> <div> <form id="mainform" action="${ctx}/bom/ciscaseaction/${action}" method="post" enctype="multipart/form-data"> <input type="file" name="file"/> <a href="${ctx}/static/Case import template.xls" rel="external nofollow" >Download Vorlage </a> </form> </div> <script type = "text/javaScript"> $ (function () {$ ('#MainForm'). }); </script> </body>Hauptschnittstelle JSP
Kopieren Sie den Code wie folgt: <a href = "javaScript (0)" rel = "externe nofollow" plain = "true" iconcls = "icon-standard-application-go" onclick = "ImportAction ()"> import </a>
//Import function importAction(){ d=$("#dlg").dialog({ title: 'Case import', width: 500, height: 500, href:'${ctx}/bom/ciscaseaction/importAction/', maximizable:true, modal:true, buttons:[{ text:'Import', handler:function(){ $('#mainform').submit(); }}, {text: 'abbrechen', handler: function () {d.panel ('close'); }Der Effekt des Klickens auf die Seite ist, dass das Klicken auf den Import zur Seite von.jsp -Seite springt
Schauen Sie sich die Controller -Schicht erneut an
/ *** Seite importieren*/ @RequestMapping (value = "ImportAction", method = requestMethod.get) public String importForm (Modellmodell) {model.addattribute ("Aktion", "Import"); return "System/CiscaseactionImoportform"; } / *** import* / @RequestMapPing (value = "import", method = requestMethod.post) @ResponseBody public StringFormForm (@RequestParam ("Datei") MultiPartFile MultiPartFile, Modellmodell) löst Ausnahme aus {ciscaseactions.uPload (multiPartFile); zurück "Erfolg"; } Serviceschicht
/ *** Fall importieren*/ @Suppresswarnings ({"rawttypes", "Deaktiviert"}) public void Upload (MultiPartFile MultiPartFile) löst eine Ausnahme aus {InputStream InputStream = multipartFile.getInputStream (); Exceltools exceltools = new exceltools (); Exceltools.sheetInfo SheetInfo = exceltools.new SheetInfo (); SheetInfo.Setrowtitle (0); MAP -Spalten = new HashMap (); columns.put ("Spalten", neuer String [] {"Name: Fallname", "Violatelaw: Break of Law", "PunishBasis: PunishBasis"}); SheetInfo.SetColumnSmapping (Spalten); Liste <HashMap <String, String >> maplist = exceltools.getExcel (InputStream, SheetInfo); für (int i = 0; i <maplist.size (); i ++) {HashMap <String, String> map = maplist.get (i); String name = map.get ("name"); if (stringutils.isempty (name)) {town BusinessException ("th" + (i + 2) + "Der Name des Falls kann nicht leer sein"); } String -Verstoßlaw = map.get ("violatelaw"); String punstmentbasis = map.get ("punishbasis"); Ciscaseaction Ciscaseaction = New Ciscaseaction (); CiscaseAction.SetName (Name); Ciscaseaction.Setviolatelaw (Violatelaw); Ciscaseaction.setPunishBasis (PunishBasis); this.insert (ciscaseaction); // Aufrufen der Einfügungsmethode derselben Ebene}}} Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.