โครงการจำเป็นต้องแยกวิเคราะห์เอกสารเพื่อรับข้อมูลดังนั้นฉันจึงพบข้อมูลออนไลน์และรวมกับการใช้งานของฉันในครั้งนี้และเขียนประสบการณ์ของฉัน:
1. จำเป็นต้องมีการพึ่งพาต่อไปนี้สำหรับโครงการ Maven:
<การพึ่งพา> <roupId> org.apache.poi </groupid> <ratifactid> poi </artifactid> <version> 3.10-final </version> </การพึ่งพา> <การพึ่งพา> <roupid> org.apache.poi </groupid>
ไปที่คลาสทดสอบโดยตรงพร้อมคำอธิบายประกอบที่สมบูรณ์ในชั้นเรียน:
แพ็คเกจ shindo.java; นำเข้า java.io.fileinputstream; นำเข้า java.io.inputstream; นำเข้า java.util.arraylist; นำเข้า java.util.list; นำเข้า org.apache.poi.hssf.usermodel.hssfcell; org.apache.poi.hssf.usermodel.hssfworkbook; นำเข้า org.apache.poi.ss.usermodel.cell; นำเข้า org.apache.poi.xssf.usermodel.xssfcell; org.apache.poi.xssf.usermodel.xssfsheet; นำเข้า org.apache.poi.xssf.usermodel.xssfworkbook; คลาสสาธารณะ Excelutil {public Static Void Main (String [] args) {String Path = ลอง {list <list <string>> result = new excelutil (). readxls (พา ธ ); System.out.println (result.size ()); สำหรับ (int i = 0; i <result.size (); i ++) {list <string> model = result.get (i); System.out.println ("ordernum:" + model.get (0) + "-> orderamount:" + model.get (1)); }} catch (exception e) {e.printstacktrace (); }} /** * * @title: readxls * @description: การประมวลผลไฟล์ xls * @param @param path * @param @return * @param @throws set set file * @return list <list <string >> @throws * * * * * * * * * * * * * * * * * * * * * * * * ไฟล์ประเภท hssfworkbook ในหน่วยความจำในหน่วยความจำซึ่งแสดงถึงไฟล์ excel ทั้งหมด * 3. วนรอบสำหรับแต่ละหน้าของไฟล์ excel นี้* 4. วนรอบสำหรับแต่ละแถวในแต่ละหน้า* 5. ประมวลผลแต่ละเซลล์ในแต่ละแถวเพื่อรับค่าของเซลล์นี้* 6. เพิ่มผลลัพธ์ของบรรทัดนี้ลงในอาร์เรย์รายการ* 7. เพิ่มผลลัพธ์ของแต่ละแถวลงไป <รายการแท่ง = ใหม่ FileInputStream (พา ธ ); // hssfworkbook ระบุ excel hssfworkbook ทั้งหมด hssfworkbook = new hssfworkbook (IS); รายการ <list <String>> result = new ArrayList <list <String>> (); ขนาด int = hssfworkbook.getNumberOfSheets (); // วนซ้ำแต่ละหน้าและประมวลผลหน้าวนปัจจุบันสำหรับ (int numsheet = 0; numsheet <size; numsheet ++) {// hssfsheet ระบุหน้า hssfsheet hssfsheet = hssfworkbook.getSheetat (numsheet); if (hssfsheet == null) {ดำเนินการต่อ; } // ประมวลผลหน้าปัจจุบันและอ่านแต่ละแถวสำหรับ (int rownum = 1; rownum <= hssfsheet.getLastrownum (); rownum ++) {// hssfrow หมายถึงแถว hssfrow hssfrow = hssfsheet.getRow (Rownum); int mincolix = hssfrow.getfirstcellnum (); int maxcolix = hssfrow.getLastcellnum (); รายการ <String> rowlist = new ArrayList <String> (); // Traversal และเปลี่ยนแถวเพื่อรับการประมวลผลแต่ละองค์ประกอบของเซลล์สำหรับ (int colix = mincolix; colix <maxcolix; colix ++) {// hssfcell แสดงถึงเซลล์ hssfcell เซลล์ = hssfrow.getcell (colix); if (cell == null) {ดำเนินการต่อ; } rowlist.add (getStringVal (เซลล์)); } result.add (rowlist); }} ผลการส่งคืน; } / ** * * @title: readxlsx * @description: การประมวลผลไฟล์ xlsx * @param @param path * @param @return * @param @throws การตั้งค่าไฟล์การตั้งค่า * @return list <list <string >> XSSFWORKBOOK XSSFWORKBOOK = New XSSFWORKBOOK (IS); รายการ <list <String>> result = new ArrayList <list <String>> (); // วนรอบทุกหน้าและประมวลผลหน้าวนปัจจุบันสำหรับ (XSSFSheet XSSFSheet: XSSFWORKBOOK) {ถ้า (XSSFSHEET == NULL) {ดำเนินการต่อ; } // ประมวลผลหน้าปัจจุบันและอ่านทุกแถวสำหรับ (int rownum = 1; rownum <= xssfsheet.getLastrownum (); rownum ++) {xssfrow xssfrow = xssfsheet.getrow (rownum); int mincolix = xssfrow.getfirstcellnum (); int maxcolix = xssfrow.getLastcellnum (); รายการ <String> rowlist = new ArrayList <String> (); สำหรับ (int colix = mincolix; colix <maxcolix; colix ++) {xssfcell cell = xssfrow.getCell (colix); if (cell == null) {ดำเนินการต่อ; } rowlist.add (cell.toString ()); } result.add (rowlist); }} ผลการส่งคืน; } // ปัญหาที่มีอยู่/** ในความเป็นจริงบางครั้งข้อมูลที่เราต้องการได้รับคือข้อมูลใน Excel แต่ในที่สุดก็พบว่าผลลัพธ์นั้นไม่เหมาะ* หากข้อมูลใน Excel ของคุณเป็นตัวเลขคุณจะพบว่าสิ่งที่เกี่ยวข้องใน Java ได้กลายเป็นวิธีการทางวิทยาศาสตร์ * ดังนั้นเมื่อได้รับค่าคุณต้องทำการประมวลผลพิเศษเพื่อให้แน่ใจว่าคุณได้รับผลลัพธ์ที่คุณต้องการ วิธีการออนไลน์คือการจัดรูปแบบข้อมูลตัวเลขเพื่อให้ได้ผลลัพธ์ที่คุณต้องการ * ต่อไปนี้เป็นวิธีอื่น ก่อนหน้านี้ลองมาดูวิธี TOSTRING () ใน POI: * * วิธีนี้เป็นวิธี POI จากซอร์สโค้ดเราสามารถพบว่าโฟลว์การประมวลผลคือ: * 1 รับประเภทเซลล์ * 2. จัดรูปแบบข้อมูลตามประเภทและเอาต์พุต สิ่งนี้สร้างสิ่งต่าง ๆ มากมายที่เราไม่ได้มองหา*ดังนั้นเราจึงทำการเปลี่ยนแปลงวิธีการนี้ * / /*สตริงสาธารณะ toString () {switch (getCellType ()) {case cell_type_blank: return ""; case cell_type_boolean: กลับ getBooleanCellValue ()? "จริง": "เท็จ"; case cell_type_error: return erroreval.getText (geterRorCellValue ()); case cell_type_formula: return getcellformula (); case cell_type_numeric: if (dateutil.iscelldateFormatted (นี่)) {dateformat sdf = ใหม่ simpledateFormat ("dd-mmm-yyyy") ส่งคืน sdf.format (getDatecellValue ()); } return getNumericCellValue () + ""; case cell_type_string: return getRichStringCellValue (). toString (); ค่าเริ่มต้น: ส่งคืน "ประเภทเซลล์ที่ไม่รู้จัก:" + getCellType (); }}* / / *** วิธีการสร้าง toString เริ่มต้น () ของ POI มีดังนี้* @title: getStringVal* @description: 1. สำหรับประเภทที่ไม่คุ้นเคยหรือว่างเปล่ากลับ "" สตริงควบคุม* 2 Type Return * @throws */ String String สาธารณะ GetStringVal (HSSFCELL Cell) {Switch (cell.getCellType ()) {case cell.cell_type_boolean: return cell.getBooleanCellValue ()? "จริง": "เท็จ"; 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 (); ค่าเริ่มต้น: return ""; -สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับการใช้แพ็คเกจ POI เพื่ออ่านรหัสเอกสาร Excel ใน Java ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!