1. แนวคิดบทนำ
Apachepoi เป็นห้องสมุดโอเพนซอร์สของมูลนิธิซอฟต์แวร์ Apache POI จัดเตรียมโปรแกรม APIs ถึง Java เพื่ออ่านและเขียนเอกสารสำคัญรูปแบบ Microsoft Office
2. รหัสที่เกี่ยวข้องกับฟังก์ชั่น
1. คำอธิบายสภาพแวดล้อม: jdk1.7+tomcat7+สปริง
2. การกำหนดค่าไฟล์การกำหนดค่า
เพิ่มการพึ่งพา POI ที่จำเป็นในไฟล์ POM
<!-เพิ่มการสนับสนุน POI-> <การพึ่งพา> <loupId> org.apache.poi </groupid> <ratifactid> poi </artifactid> <version> 3.13 </version> </การพึ่งพา> <การพึ่งพา
การอัปโหลดไฟล์การกำหนดค่า Spring-MVC.XML
<bean id = "MultipartResolver"> <!-การเข้ารหัสเริ่มต้น-> <ชื่อคุณสมบัติ = "defaultEncoding" value = "UTF-8" /> <!-ค่าขนาดไฟล์สูงสุด-> <ชื่อคุณสมบัติ = "maxUploadSize" value = "10485760000" /> <! </ebean>
3. คลาสเครื่องมือที่เกี่ยวข้องและการเขียนรหัส
Excel Parsing Tool Class (importExcelutil.java)
แพ็คเกจ com.jointem.hrm.utils; นำเข้า org.apache.poi.hssf.usermodel.hssfworkbook; นำเข้า org.apache.poi.ss.usermodel.cell; นำเข้า org.apache.poi.ss.usermodel.row; org.apache.poi.ss.usermodel.workbook; นำเข้า org.apache.poi.ss.util.cellrangeaddress; นำเข้า org.apache.poi.xssf.usermodel.xssfworkbook; นำเข้า Java.io.ioexception; java.text.simpledateFormat; นำเข้า java.util.arraylist; นำเข้า java.util.list;/*** สร้างโดย Jenking เมื่อ 2017/9/8 */คลาสสาธารณะ importExcelUtil {สตริงคงสุดท้ายส่วนตัว excel2003l = ". xls"; // 2003- รุ่น Excel Private Final Final String Excel2007U = ". XLSX"; // 2007+ เวอร์ชันของ Excel/** * คำอธิบาย: รับข้อมูลในสตรีม IO และรวบรวมไว้ในรายการ <รายการ <object>> วัตถุ * @param in, filename * @return * @throws ioexception */รายการสาธารณะ <รายการ <object >> getBankListByexcel // สร้างงาน Excel Workbook = this.getWorkbook (ในชื่อไฟล์); ถ้า (null == งาน) {โยนข้อยกเว้นใหม่ ("สร้างแผ่นงาน Excel ว่างเปล่า!"); } แผ่นชีต = null; แถวแถว = null; เซลล์เซลล์ = null; list = new ArrayList <list <object >> (); // ความเงียบสงบแผ่นทั้งหมดใน excel สำหรับ (int i = 0; i <work.getNumberOfSheets (); i ++) {sheet = work.getSheetat (i); if (sheet == null) {ดำเนินการต่อ;} // ความเงียบสงบทุกแถวใน System.out.out.println (sheet.getLastrownum ()); สำหรับ (int j = sheet.getfirstrownum (); j <= sheet.getLastrownum ()-11; j ++) {row = sheet.getrow (j); // ถ้า (แถว == null || row.getfirstcellnum () == j) // {// ต่อ; สำหรับ (int y = row.getfirstcellnum (); y <row.getLastcellnum (); y ++) {cell = row.getCell (y); ถ้า (สิ่งนี้. } else {li.add (this.getCellValue (เซลล์)); }} list.add (li); }} work.close (); รายการคืน; } / ** * คำอธิบาย: ตามไฟล์เสริมของไฟล์เวอร์ชันของไฟล์ที่อัปโหลดแบบปรับตัว * @param instr, ชื่อไฟล์ * @return * @throws Exception * / GetWorkbook Public Workbook (InputStream Instr, String filename) String fileType = filename.substring (filename.lastindexof (".")); if (excel2003l.equals (fileType)) {wb = hssfworkbook ใหม่ (Instr); // 2003-} อื่นถ้า (excel2007u.equals (fileType)) {wb = ใหม่ XSSFWORKBOOK (Instr); // 2007+} else {โยนข้อยกเว้นใหม่ ("รูปแบบไฟล์ที่แยกวิเคราะห์ไม่ถูกต้อง!"); } return wb; } / ** * คำอธิบาย: จัดรูปแบบค่าในตาราง * @param cell * @return * / วัตถุสาธารณะ getCellValue (เซลล์เซลล์) {ค่าวัตถุ = null; DecimalFormat df = decimalformat ใหม่ ("0"); // รูปแบบหมายเลขสตริงอักขระ SimpledateFormat SDF = New SimpledateFormat ("YYY-MM-DD"); // รูปแบบวันที่ DECIMALFORMAT DF2 = New DecimalFormat ("0"); // รูปแบบสวิตช์หมายเลข (cell.getCellType ()) {case cell.cell_type_string: value = cell.getRichStringCellValue (). getString (); หยุดพัก; case cell.cell_type_numeric: if ("ทั่วไป" .equals (cell.getCellStyle (). getDataFormatString ())) {value = df.format (cell.getNumericCellValue ()); } อื่นถ้า ("m/d/yy" .equals (cell.getcellstyle (). getDataFormatString ())) {value = sdf.format (cell.getDateCellValue ()); } else {value = df2.format (cell.getNumericCellValue ()); } หยุดพัก; case cell.cell_type_boolean: value = cell.getBooleanCellValue (); หยุดพัก; case cell.cell_type_blank: value = ""; หยุดพัก; ค่าเริ่มต้น: break; } ค่าส่งคืน; } / ** * รับเนื้อหาของเซลล์ที่ผสาน * @param sheet * @param row * @param คอลัมน์ * @return * / วัตถุสาธารณะ getMergedRegionValue (แผ่นชีท, แถว int, คอลัมน์ int) สำหรับ (int i = 0; i <sheetmergecount; i ++) {cellrangeaddress ca = sheet.getMergedRegion (i); int firstColumn = ca.getFirstColumn (); int LastColumn = Ca.getLastColumn (); int firstrow = ca.getfirstrow (); int lastrow = ca.getLastrow (); if (row> = firstrow && row <= lastrow) {ถ้า (คอลัมน์> = firstColumn && คอลัมน์ <= lastColumn) {row frow = sheet.getRow (firstrow); เซลล์ fcell = frow.getCell (FirstColumn); ส่งคืนสิ่งนี้ getCellValue (fcell); }} return null; } / ** * พิจารณาว่าเป็นเซลล์ที่ผสาน * @param sheet * @param row * @param คอลัมน์ * @return * / บูลีนสาธารณะ ismergedRegion (แผ่นชีท, แถว int, คอลัมน์ int) {int sheetMergecount = sheet.getNummergedRegions (); สำหรับ (int i = 0; i <sheetmergecount; i ++) {cellrangeaddress range = sheet.getMergedRegion (i); int firstColumn = range.getFirstColumn (); int lastColumn = range.getLastColumn (); int firstrow = range.getFirTrow (); int lastrow = range.getLastrow (); if (row> = firstrow && row <= lastrow) {if (คอลัมน์> = firstColumn && คอลัมน์ <= lastColumn) {return true; }}} return false; - คำขอตัวควบคุม (หน้ากระบวนการ Excel Excel Regement)
แพ็คเกจ com.poiexcel.control; นำเข้า Java.io.InputStream; นำเข้า java.io.printwriter; นำเข้า java.util.list; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า org.springframework.stereotype.controller; นำเข้า org.springframework.web.bind.annotation.requestmapping; นำเข้า org.springframework.web.bind.annotation.requestmethod; นำเข้า org.springframework.web.bind.annotation.responsebody; นำเข้า org.springframework.web.multipart.multipartfile; นำเข้า org.springframework.web.multipart.multiparthttpservletrequest; นำเข้า com.poiexcel.util.importexcelutil; นำเข้า com.poiexcel.vo.infovo; @Controller @RequestMapping ("/uploadexcel/ *") คลาสสาธารณะ UploadexcelControl {/** * คำอธิบาย: นำเข้าไฟล์ excel ผ่านการส่งแบบฟอร์มแบบดั้งเดิม * @param คำขอ * @throws Exception */@requestmapping (value = "upload.do", method = {requestmethod.get โยนข้อยกเว้น {multiparthttpservletRequest multipartrequest = (multiparthttpservletRequest) คำขอ; inputStream ใน = null; รายการ <list <object>> listob = null; ไฟล์ multipartFile = multipartrequest.getFile ("upfile"); if (file.isempty ()) {โยนข้อยกเว้นใหม่ ("ไฟล์ไม่มีอยู่!"); } in = file.getInputStream (); listob = ใหม่ importExcelUtil (). getBankListByExcel (ใน, file.getoriginalfilename ()); in.close (); // วิธีการบริการที่เกี่ยวข้องสามารถเรียกได้ที่นี่เพื่อบันทึกข้อมูลลงในฐานข้อมูล ตอนนี้เฉพาะข้อมูลที่เป็นเอาต์พุตสำหรับ (int i = 0; i <listob.size (); i ++) {รายการ <jobch> 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 ("ข้อมูลการพิมพ์-> สถาบัน:"+vo.getCode ()+"ชื่อ:"+vo.getName ()+"เวลา:"+vo.getdate ()+"สินทรัพย์:"+vo.getMoney ()); } return "ผลลัพธ์"; - รหัสส่วนหน้า
front-end ใช้ไฟล์อัพโหลดไฟล์ fileinput ของ bootstrap และจำเป็นต้องแนะนำ fileinput.css, fileinput.js, zh.js, bootstrap.css, bootstrap.js, jQuery.min.js.
<body> <h4> รายการข้อมูลการเข้าร่วม </h4> <รูปแบบวิธี = "โพสต์" enctype = "multipart/form-data" id = "form1" action = "$ {pagecontext.request.contextpath}/การเข้าร่วม/uploadexcel" $ ('#file-zh'). fileInput ({ภาษา: 'zh', uploadurl: '$ {pageContext.request.contextpath}/การเข้าร่วม/uploadexcel' วัตถุ VO, บันทึกวัตถุที่เกี่ยวข้องของข้อมูล excel
แพ็คเกจ com.poiexcel.vo; // แปลงแต่ละแถวของ excel เป็นวัตถุสาธารณะคลาสสาธารณะ infovo {รหัสสตริงส่วนตัว; ชื่อสตริงส่วนตัว; วันที่สตริงส่วนตัว เงินสตริงส่วนตัว สตริงสาธารณะ getCode () {รหัสส่งคืน; } โมฆะสาธารณะ setCode (รหัสสตริง) {this.code = code; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } สตริงสาธารณะ getDate () {วันที่ส่งคืน; } โมฆะสาธารณะ setDate (วันที่สตริง) {this.date = วันที่; } สตริงสาธารณะ getMoney () {คืนเงิน; } โมฆะสาธารณะ setMoney (เงินสตริง) {this.money = เงิน; -3. ผลการแสดงผล
1. การแสดงหน้า
2. พิมพ์ข้อมูลแบ็กเอนด์
4. สรุป
ตัวอย่างนี้จะส่งออกข้อมูลที่นำเข้าในคอนโซลเท่านั้นและไม่คงอยู่ หากคุณต้องการคงอยู่เพียงโทรหาเลเยอร์บริการที่ตำแหน่งความคิดเห็น
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น