บทความนี้แบ่งปันการนำเข้าแบทช์ของข้อมูลตาราง Excel ใน Java สำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้: นำเข้า Java.awt.Color; นำเข้า Java.io.ByTearrayInputStream; นำเข้า Java.io.ByTeArrayOutputStream; นำเข้า Java.io.File; นำเข้า Java.io.FileInputStream; นำเข้า Java.io.InputStream; นำเข้า java.lang.reflect.field; นำเข้า java.text.dateFormat; นำเข้า java.text.decimalformat; นำเข้า java.text.simpledateFormat; นำเข้า Java.util.*; นำเข้า Javax.swing.text.attributeset; นำเข้า Javax.swing.text.element; นำเข้า javax.swing.text.html.css; นำเข้า Javax.swing.text.html.htmldocument; นำเข้า javax.swing.text.html.htmleditorkit; นำเข้า cn.vrview.dev.common.exception.businessexception; นำเข้า org.apache.commons.lang3.Stringutils; นำเข้า org.apache.logging.log4j.logmanager; นำเข้า org.apache.logging.log4j.logger; นำเข้า org.apache.poi.hssf.usermodel.*; นำเข้า org.apache.poi.hssf.util.hssfcolor; นำเข้า org.apache.poi.ss.usermodel.*; นำเข้า org.apache.poi.ss.util.cellrangeaddress; นำเข้า org.apache.poi.xssf.usermodel.xssfcolor; นำเข้า org.apache.poi.xssf.usermodel.xssffont; นำเข้า org.apache.poi.xssf.usermodel.xssfworkbook; นำเข้า org.springframework.web.util.htmlutils; นำเข้า cn.vrview.dev.common.util.stringutil; คลาสสาธารณะ ExcelTools { / ** log* / logger แบบคงที่ส่วนตัว log = logManager.getLogger (); /** * ส่งออก Excel * <p> * การใช้งาน: <br> * <code> รายการ <แผนที่ <สตริง, วัตถุ >> datalist = arraylist ใหม่ <แผนที่ <สตริง, วัตถุ >> (); <br> * คือ = exceltools.exportxls (datalist, string [] * </ code> * * @param collect * การรวบรวมข้อมูลที่จะส่งออก * @param Header * คอลัมน์ที่จะส่งออก * @return อินพุต return ไฟล์สตรีมไฟล์ */ public static inputstream exportxls (คอลเลกชัน <แผนที่ <สตริง, วัตถุ >> รวบรวม, สตริง [] ส่วนหัว) หนังสือ HSSFWORKBOOK = HSSFWORKBOOK ใหม่ (); ลอง {// เพิ่มแผ่น hssfsheet แผ่น = book.createsheet ("sheet1"); // กำหนดชุดของชื่อคอลัมน์ที่จะส่งออก Set <String> คอลัมน์ = new HashSet <String> (); // ตั้งค่าสีพื้นหลังเซลล์ hssfcellstyle cellstyle = book.createCellStyle (); CellStyle.SetFillPattern (hssfcellstyle.solid_foreground); CellStyle.SetFillForeGroundColor (ใหม่ hssfcolor.yellow (). getIndex ()); // สร้างส่วนหัว hssfrow row = sheet.createrow (0); hssfcell cell = row.createCell (0); cell.setCellStyle (CellStyle); cell.setCellValue ("ลำดับ"); // หมายเลขคอลัมน์เริ่มต้นจาก 1 int n = 1; // การแยกวิเคราะห์สตริงส่วนหัวสำหรับ (string str: header) {string [] arr = str.split (":"); columns.add (n + "," + arr [0]); // เพิ่มชื่อฟิลด์เพื่อส่งออกและผูกกับหมายเลขคอลัมน์ n เซลล์ = row.createCell (n); cell.setCellStyle (CellStyle); cell.setCellValue (arr [1]); n ++; } // สร้างแถวข้อมูลเริ่มต้นจาก 1, 0 คือส่วนหัว int i = 1; // สร้างแถวข้อมูลสำหรับ (แผนที่ <สตริงวัตถุ> แผนที่: รวบรวม) {hssfrow dataRow = sheet.createrow (i); // สร้างหมายเลขลำดับ dataRow.createCell (0) .setCellValue (i); // สร้างคอลัมน์อื่น ๆ สำหรับ (คอลัมน์สตริง: คอลัมน์) {// ใช้เครื่องหมายจุลภาคเพื่อรับชื่อฟิลด์ [0] คือหมายเลขคอลัมน์ที่สอดคล้องกับส่วนหัว คอลัมน์สตริง = column.split (",") [1]; // สร้างคอลัมน์หมายเลขลำดับเซลล์ = dataRow.createCell (integer.parseint (column.split (",") [0])); ค่าสตริง = ""; value = map.get (columnName) + ""; // แปลงเป็น "" ถ้า ("null" .Equals (ค่า)) {value = ""; } RichTextString RichTextString = processHTML (หนังสือค่า); cell.getCellStyle (). setWrapText (เท็จ); cell.setCellValue (RichTextString); } i ++; } book.write (out); out.close (); } catch (exception e) {e.printstacktrace (); } ส่งคืน ByteArrayInputStream ใหม่ (out.tobyteArray ()); } /** * รับข้อมูลไฟล์ excel <br> * การใช้งาน: <br> * sheetinfo sheetinfo = new exceltools (). sheetinfo ใหม่ (); <br> * sheetinfo.setrowtitle (0); รายการ <String> sheets = new ArrayList <String> (); <br> * string sheetName = "sheet1"; Sheets.add (SheetName); <br> * SheetInfo.SetSheetNames (แผ่น); <br> * sheetinfo.setColumnSmapping (สตริงใหม่ [] {"prodname: ชื่อผลิตภัณฑ์", * "prodspec: ข้อมูลจำเพาะ", "collectprice: ราคา:" + {@link regexpenum} * regexpenum.notempy_isnumber, <br> * แผนที่ <สตริงรายการ> data = exceltools.getexcel (ไฟล์ใหม่ (พา ธ ), sheetInfo); * * @param * * @param sheetinfo * ข้อมูลการเริ่มต้น * @return แผนที่ {sheet1: รายการ} * @throws ยกเว้น * ข้อยกเว้น */ @suppresswarnings ("rawtypes") แผนที่สาธารณะคงที่ getExcel (ไฟล์ f, sheetinfo sheetinfo Exceltype); } @suppresswarnings ({"rawtypes", "unchected"}) แผนที่สาธารณะคงที่ getExcel (inputstream ใน, sheetInfo sheetInfo, สตริง exceltype) โยนข้อยกเว้น {แผนที่ <String, String> columnsmap = new hashmap <string, string> () // รายการแผนที่การตรวจสอบคอลัมน์รายการ <string> errmsg = new ArrayList <String> (); int errnum = 0; // จำนวนข้อผิดพลาดทั้งหมด int errlimit = 10; // จำกัด จำนวนของข้อผิดพลาดพรอมต์/ ** ใช้เพื่อจัดเก็บเนื้อหาทั้งหมดที่ Excel อ่านตามกฎที่ระบุ*/ MAP ExcelInfo = new HashMap (); สมุดงานหนังสือ = NULL; ลอง {ถ้า (exceltype.equals ("xls")) {book = new hssfworkbook (in); // โยน BusinessException ใหม่ ("เวอร์ชัน Excel ต่ำเกินไปโปรดใช้เวอร์ชัน 2007 หรือสูงกว่า (ส่วนขยาย: XLSX)"); } else {book = new xssfworkbook (in); }} catch (outofMemoryError e) {โยน runtimeException ใหม่ ("ไฟล์ excel ปัจจุบันมีขนาดใหญ่เกินไปโปรดตรวจสอบว่ามีข้อมูลว่างเปล่าที่ไม่ถูกต้องในแต่ละตารางแผ่นรวมถึงข้อมูลแถวและคอลัมน์ที่มีรูปแบบและโครงร่างโปรดลบข้อมูลที่ไม่ถูกต้องเหล่านี้! } // chectitle (หนังสือ, sheetinfo); // รับจำนวนแผ่นงาน int sheetNum = sheetInfo.getSheetNames (). size (); // ลูปแผ่นงานทั้งหมดและอ่านข้อมูลภายในสำหรับ (int sheetIndex = 0; sheetIndex <sheetNum; sheetIndex ++) {// รับสตริงวัตถุแผ่นงานปัจจุบัน sheetName = htmlutils.htmlunescape (sheetinfo.getSheetNames () แผนที่ <สตริง, สตริง> validateMap = new hashmap <string, string> (); สำหรับ (String Mapstr: SheetInfo.getColumnSmapping (). รับ (sheetName)) {string [] arr = mapstr.split (":"); columnsmap.put (arr [1], arr [0]); if (arr.length == 3) {// ถ้านิพจน์การตรวจสอบไม่ว่างเปล่าให้เพิ่มลงในแผนที่ไปยัง ValidateMap.put (arr [1], arr [2]); }} แผ่นชีท = book.getSheet (sheetName); ถ้า (null == แผ่น) {โยน runtimeException ใหม่ (string.format ("ไม่สามารถรับตารางได้โปรดยืนยันว่าแผ่น"%s "มีอยู่ใน Excel", sheetName)); } // ใช้เพื่อจัดเก็บเนื้อหาข้อมูลในรายการแผ่นงาน sheetList = new ArrayList (); // รับจำนวนแถวในตาราง int ปัจจุบัน = sheet.getLastrownum (); // รับจำนวนคอลัมน์ในคอลัมน์ int ตารางปัจจุบัน = sheet.getrow (sheetinfo.getrowtitle ()). getLastcellnum (); if (rows <= sheetInfo.getRowTitle ()) {// หากตารางปัจจุบันไม่มีข้อมูลที่ต้องการให้ดำเนินการวนต่อไปต่อไป } // รับรายการเนื้อหาชื่อเวิร์กชีทปัจจุบัน <String> titleList = new ArrayList <String> (); // วนซ้ำทุกเซลล์ในแต่ละแถวและอ่านค่าในแถวเซลล์ titlerow = sheet.getrow (sheetinfo.getrowtitle ()); สำหรับ (int jj = 0; jj <คอลัมน์; jj ++) {cell celltitle = titlerow.getcell (jj); if (celltitle! = null) {int row = celltitle.getRowIndex (); คอลัมน์ int = celltitle.getColumnIndex (); ถ้า (ismergedRegion (แผ่น, แถว, คอลัมน์)) {titleList.add (getMergedRegionValue (แผ่น, แถว, คอลัมน์)); } else {titlelist.add (getCellValue (celltitle)); }} else {โยน runtimeException ใหม่ ("ข้อผิดพลาดการอ่านส่วนหัวตารางปัจจุบันตั้งค่าเป็น" th " + (sheetinfo.getrowtitle () + 1) +" แถว <br/> เนื้อหาของส่วนหัวของตารางคือ: "titlerow +" โปรดตรวจสอบว่าถูกต้องหรือไม่หากมีข้อยกเว้น System.out.println (Titlelist); (Stringutils.deletewhitespace (t) .equalsignorecase (colarr [1])) {include = true; ชื่อเรื่อง (int i = sheetinfo.getrowtitle () + 1; i <= rows; i ++) {map rowmap = new hashmap (); (int j = 0; j <คอลัมน์; j ++) {// ลูปทุกเซลล์ในแต่ละแถวและอ่านค่าในคอลัมน์สตริงของเซลล์ = titlelist.get.get (j); Title: Columnsmap.keyset ()) {ถ้า (stringutils.deletewhitespace (columntitle) .equalsignorecase (ชื่อ) {columnmapping = columnsmap.get (ชื่อ // สีพื้นหลังของเซลล์ถ้า (exceltype.equals ("xls")) {hssfcolor color = (hssfcolor) cellstyle.getfillfergroundcolorcolor (); XSSFCOLOR COLOR = (XSSFCOLOR) CELLSTYLE.GENTFILLFORGRUNTERCOLCOLOR (); เซลล์); ถ้า (mergrow> 0 &&! stringutil.isempty (ค่า)) {string rowspan = ""; +1); ColumnSmap.get (ColumnTitle); ValidateRegmsg = eum.getText ();} ถ้า (! "ข้อมูลคือ: '" value.trim () + "' ไม่ตรงกัน! (ismergedRegion (แผ่น, แถว, คอลัมน์) {// rowmap.put (คอลัมน์การทำแผนที่, getMergedRegionValue (แผ่น, แถว, คอลัมน์)); SheetList);} in.close (); RuntimeException (errmsg.toString (). replaceall ("// [| //]", "")); = new hashmap <string, string> (); SheetInfo.getColumnsmapping (). รับ ("คอลัมน์")) {string [] arr = mapstr.split (":"); เนื้อหาทั้งหมดที่ Excel อ่านตามกฎที่ระบุ*/ list excelinfo = new ArrayList (); SheetIndex <Sheetnum; sheet.getrow (sheetinfo.getrowtitle ()); BusinessException ("รูปแบบไฟล์ไม่ถูกต้องโปรดทำการเลือกหรือดาวน์โหลดเทมเพลต")} ถ้า (แถว <= sheetInfo.getRowTitle ()) {// ถ้าตารางปัจจุบันไม่มีข้อมูลที่จำเป็น arraylist <String> (); สำหรับ (String S: ชื่อ) {// ถ้าส่วนหัวของตารางในตาราง excel หายไปฟิลด์ถ้า (! titlelist.contains (s.split (":") [1])) {// errmsg.add ("" + sheet.getSheetName () + "table ' เทมเพลต ");}} // เริ่มวนรอบทุกแถวอ่านค่าของแต่ละแถวและอ่านจากบรรทัดด้านล่างชื่อสำหรับ (int i = sheetInfo.getRowTitle ()+1; i <= rows; i ++) {map rowmap = ใหม่ hashmap (); ทุกเซลล์ในแต่ละแถวและอ่านค่าในคอลัมน์สตริงของเซลล์ = titlelist.get (j); "; (! stringutils.isempty (validatereg)) {if (value.matches (validatereg)) {rowmap.put (columnMapping, ค่า); ตรงกับ [" + quidateregmsg +"] </br>/n ");}}} else {rowmap.put (columnmapping, value);}}} excelinfo.add (rowmap);} // excelinfo.put {// ถ้า (errnum> errlimit) {// errmsg.add ("แม่แบบข้อมูลที่คุณนำเข้าเป็นข้อผิดพลาดในรูปแบบมากเกินไป (ทั้งหมด" + errnum + "s) โปรดตรวจสอบอย่างระมัดระวังว่าข้อมูลเทมเพลตถูกต้อง!"); Excelinfo;} /**** ใช้สำหรับการดำเนินการ Excel, ข้อมูลการเริ่มต้นตาราง** @author: ji le* @date: 2013-12-2 1:43:04 PM* @Since: 1.0* /คลาสสาธารณะ SheetInfo { /** ฟิลด์จะต้องอ่าน */ แผนที่ส่วนตัว <สตริง, สตริง []> คอลัมน์การทำคอลัมน์; == 0) {this.SheetNames.add ("Sheet1")} else {this.SheetNames = sheetNames; }} int สาธารณะ getRowtitle () {return rowtitle; คอลัมน์การทำแผนที่; {/** ว่างเปล่า*/notempty ("ไม่สามารถว่างเปล่า", "(?! getText () {return text; @suppresswarnings ("unused") private static richtextring processhtml (hssfworkbook wb, string html) {richtextstring rt = null; doc.getLength (), html, 0, 0, null); = line.getEndoffset (); sb.append (subtext); line.getEndoffset (); } catch (exception e) {log.warn (e.getMessage ()); wb.createfont (); AS.GetAttribute (attrib) .getClass (). GetDeclaredField ("C"); hssffont && wb อินสแตนซ์ hssfworkbook) {hssfpalette pal = ((hssfworkbook) wb) .getCustompalette (); FONT) .SetColor (Col.GetIndex ()); GetMergedRegionRow (แผ่นงานเซลล์) {// รับจำนวนเซลล์ที่ผสานมีจำนวน sheetmergercount = sheet.getNummergedRegions (); คอลัมน์เริ่มต้น int firstc = ca.getfirstcolumn (); {ถ้า (cell.getRowIndex () == firstr) {return lastr - firstr;}}} return 0; Sheet.getNummergedRegions (); ca.getLastrow (); Merged Cell * * @param Sheet * @param Row * Row Subscript * @param คอลัมน์ * คอลัมน์ตัวห้อย * @return */ บูลีนคงที่สาธารณะ ismergedRegion (แผ่นชีท, แถว int, คอลัมน์ int) {int sheetmergecount = sheet.getNummergedRegions (); Sheet.getMergedRegion (I); จริง;}}} return false; แถว* @param lastrow* end row* @param firstcol* คอลัมน์เริ่ม* @param lastcol* คอลัมน์สิ้นสุด*/ @suppresswarnings ("ไม่ได้ใช้") โมฆะส่วนตัว mergeregion (แผ่นชีท, int firstrow, int lastrow, int firstcol, int lastcol) lastcol));} / ** * รับค่าของเซลล์ * * @param cell * @return * / สตริงคงที่สาธารณะ getCellValue (เซลล์) {ถ้า (เซลล์ == null) กลับ " cell.cell_type_boolean) {return string.valueof (cell.getBooleanCellValue ()); (hssfdateutil.iscelldateformatted (เซลล์)) {// จัดการรูปแบบวันที่และรูปแบบเวลา SimpledateFormat SDF = ใหม่ SimpledateFormat ("yyyy-mm-dd"); == 31) {// รูปแบบวันที่กำหนดเอง: YY ปี mm วันที่ DD (แก้ไขโดยการตัดสินรูปแบบ ID ของเซลล์ค่าของ ID คือ 3 1) SimpledateFormat SDF = ใหม่ SimpleDateFormat ("yyyy-mm-dd"); . getJavadate (ค่า); Filtersstr (String str) {str = str.replace (string.valueof ((char) 160), ""). reflace (string.valueof ((ถ่าน) 65279), ""); System.out.println (Convertrgbtohex (hssfcolor.yellow.triplet); String convertrgbtohex (short [] rgb) {int r = rgb [0], g = rgb [1], b = rgb [2]; == 10) RFString = "A" == 10) RSSTRING = "A" String.valuef (rred); gfstring = "e"; "D"; BFSTRING = "BFESTION IF (สีน้ำเงิน == 12) BFSTRING =" C "; == 11) bsstring = "b"; BSSTRING; ดูหน้าจาก. jsp อีกครั้ง
<body> <div> <form id = "mainform" action = "$ {ctx}/bom/ciscaseaction/$ {action}" method = "post" enctype = "multipart/form-data"> <อินพุตประเภท = "ไฟล์" เทมเพลต </a> </form> </div> <script type = "text/javascript"> $ (function () {$ ('#mainform') ฟอร์ม ({onsubmit: function () {var isvalid = $ (this) .form ('validate'); - </script> </body>อินเทอร์เฟซหลัก jsp
คัดลอกรหัสดังต่อไปนี้: <a href = "JavaScript (0)" rel = "ภายนอก nofollow" plain = "true" iconcls = "ไอคอนมาตรฐาน-แอปพลิเคชัน-go" onclick = "importaction ()"> นำเข้า </a>
// นำเข้าฟังก์ชั่นนำเข้า () {d = $ ("#dlg"). กล่องโต้ตอบ ({title: 'case import', ความกว้าง: 500, ความสูง: 500, href: '$ {ctx}/bom/ciscaseaction/importAction/') }}, {text: 'cancel', handler: function () {d.panel ('close');}}]}); -ผลของการคลิกบนหน้าคือการคลิกที่นำเข้าจะข้ามไปที่หน้า from.jsp
ดูเลเยอร์คอนโทรลเลอร์อีกครั้ง
/ *** นำเข้าหน้า*/ @requestMapping (value = "importAction", method = requestMethod.get) สตริงสาธารณะ importorm (โมเดลโมเดล) {model.adDattribute ("การกระทำ", "นำเข้า"); ส่งคืน "System/Ciscaseactionimoportform"; } / *** นำเข้า* / @requestMapping (value = "นำเข้า", method = requestMethod.post) @ResponseBody สตริงสาธารณะ importorm (@requestParam ("ไฟล์") MultipartFile MultipartFile รุ่น MOLTIPARTFILE) กลับ "ความสำเร็จ"; - ชั้นบริการ
/ *** นำเข้ากรณี*/ @suppresswarnings ({"rawtypes", "unchecked"}) การอัปโหลดโมฆะสาธารณะ (MultipartFile MultipartFile) โยนข้อยกเว้น {inputStream inputStream = multipartFile.getInputStream (); exceltools exceltools = new exceltools (); exceltools.sheetinfo sheetinfo = exceltools.new sheetinfo (); SheetInfo.SetRowTitle (0); คอลัมน์แผนที่ = ใหม่ hashmap (); columns.put ("คอลัมน์", สตริงใหม่ [] {"ชื่อ: ชื่อกรณี", "Violatelaw: Break of Law", "Punishbasis: Punishbasis"}); SheetInfo.SetColumnSmapping (คอลัมน์); รายการ <hashmap <string, string >> maplist = exceltools.getexcel (inputstream, sheetinfo); สำหรับ (int i = 0; i <maplist.size (); i ++) {hashmap <สตริง, สตริง> map = maplist.get.get (i); ชื่อสตริง = map.get ("ชื่อ"); if (stringutils.isempty (ชื่อ)) {โยน BusinessException ใหม่ ("th" + (i + 2) + "ชื่อของเคสไม่สามารถว่างเปล่าได้"); } String rialationLaw = map.get ("violatelaw"); การลงโทษสตริง = map.get ("punishbasis"); Ciscaseaction Ciscaseaastic = new ciscaseaffer (); Ciscaseaction.setName (ชื่อ); Ciscaseaction.setViolatelaw (Violatelaw); Ciscaseaction.setpunishbasis (Punishbasis); this.insert (Ciscaseaffer); // เรียกวิธีการแทรกของเลเยอร์เดียวกัน}} ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น