ตัวอย่าง: นำเข้าข้อมูลที่เกี่ยวข้อง (ไฟล์ excel) และแก้ไขข้อมูลไฟล์ที่เกี่ยวข้อง
การกำหนดค่าไฟล์ XML
จากนั้นกำหนดค่าขนาดของไฟล์ที่จะอัปโหลดในไฟล์ Spring XML
<!-อัปโหลดการสกัดกั้นไฟล์ตั้งค่าขนาดไฟล์อัพโหลดสูงสุด 10m = 10*1024*1024 (b) = 10485760 ไบต์-> <bean id = "multipartresolver"> <property name = "maxuploadsize"
การกำหนดค่าอินเตอร์เฟส JSP
<div> <form id = "SourceFile" name = "SourceFile" action = "" method = "post" enctype = "multipart /form-data"> <อินพุต type = "button" value = "เพิ่ม" onClick = "addairline ()" /> <อินพุต style = " id = "source_file" name = "sourceFile" type = "file" value = "เลือกไฟล์" /> <อินพุต style = "margin-left: 20px;" data-loading-text = "อย่าส่งซ้ำ ๆ " type = "submit" value = "upload" onclick = "uppolicy ()"> <อินพุต style = "margin-left: 20px;" type = "subment" value = "template" onclick = "return downloadtemplate ();"> </form> </div>
ไฟล์ JS
ฟังก์ชั่น uppolicy () {document.sourcefile.action = "/login/policy/uploadcsv"; var submentUrl = document.getElementById ("SourceFile") แอตทริบิวต์ ["การกระทำ"]. ค่า; $ .ajax ({ประเภท: "โพสต์", url: submenturl, data: $ ('#sourcefile'). serialize (), ข้อมูล: "json", ความสำเร็จ: ฟังก์ชั่น (ผลลัพธ์) {var json = json.parse (ผลลัพธ์); if (json.flag == "0" | | -การกำหนดค่าคอนโทรลเลอร์
@RequestMapping (value = "/uploadcsv", method = requestMethod.post) @ResponseBody สตริงสาธารณะ uploadCSV (@RequestParam ("SourceFile") MultipartFile SourceFile, httpServletRequest หรือไม่ // รับชื่อสตริงชื่อไฟล์ = SourceFile.getOriginalFilename (); // เพิ่มเติมตรวจสอบว่าไฟล์นั้นว่างเปล่า (นั่นคือพิจารณาว่าขนาดของมันคือ 0 หรือว่าชื่อของมันเป็นโมฆะ) ขนาดยาว = sourceFile.getSize (); if (name == null || (""). เท่ากับ (ชื่อ) && size == 0) ส่งคืน null; // นำเข้าแบทช์ พารามิเตอร์: ชื่อไฟล์ไฟล์ บูลีน b = batchimport (ชื่อ, sourcefile); jsonObject jsonObject = new jsonObject (); if (b) {jsonObject.put ("Flag", 0); jsonObject.put ("ความสำเร็จ", "นำเข้าแบทช์ Excel ประสบความสำเร็จ!"); } else {jsonObject.put ("ธง", 1); jsonObject.put ("ความสำเร็จ", "การนำเข้าแบทช์ Excel ล้มเหลว!"); } return jsonobject.toString (); -การจัดวางไม่ได้มีรายละเอียดและการประมวลผลจะทำในคอนโทรลเลอร์
บูลีนสาธารณะ Batchimport (ชื่อสตริง, ไฟล์ multipartFile) {boolean b = false; // สร้างและประมวลผล excel excelutils readExcel = new excelutils (); // Parse Excel และรับข้อมูลลูกค้า รายการ <otapolicymodel> cpolicylist = readExcel.getExcelInfo (ชื่อ, ไฟล์); if (cpolicylist! = null) {b = true; } // เพิ่มข้อมูลซ้ำ ๆ (หมายเหตุ: อันที่จริงคุณสามารถใช้ชุด cpolicylist โดยตรงเป็นพารามิเตอร์ที่นี่และใช้แท็ก foreach เพื่อเพิ่มในไฟล์การทำแผนที่ที่สอดคล้องกันของ mybatis สำหรับการเพิ่มแบทช์) สำหรับ (ลูกค้า otapolicymodel: cpolicylist) } return b; -คลาสเครื่องมือ excelutils.java
นั่นคือวิธีการที่เรียกโดย readExcel.getExcelInfo (ชื่อ, ไฟล์); คำชี้แจงในวิธีการข้างต้นและวิธีการอื่น ๆ ที่เกี่ยวข้อง
Apache Poi จัดเตรียมโปรแกรม APIs ถึง Java เพื่ออ่านและเขียนเอกสารสำคัญรูปแบบ Microsoft Office อย่างไรก็ตามก่อนอื่นเราต้องตัดสินรุ่น Excel และเลือกสมุดงานอื่น (เวอร์ชัน 2003 สอดคล้องกับ HSSFWORKBOOK และเวอร์ชัน 2007 และสูงกว่าสอดคล้องกับ XSSFWORKBOOK) นอกจากนี้โดยทั่วไปการพูดก่อนคัดลอกไฟล์ที่อัปโหลดโดยผู้ใช้ไคลเอนต์ไปยังดิสก์ท้องถิ่นของเซิร์ฟเวอร์แล้วอ่านจากไฟล์สำเนานี้ดังนั้นจึงหลีกเลี่ยงการสูญเสียข้อมูลหรือการทุจริตในระหว่างการอ่านเนื่องจากข้อยกเว้นเครือข่ายหรือเงื่อนไขอื่น ๆ ของไคลเอนต์
แพ็คเกจ com.flight.inter.otaadapter.commons.util; นำเข้า com.flight.inter.otaadapter.model.otapolicymodel; นำเข้า org.apache.poi.hssf.usermodel.hssfworkbook; นำเข้า org.apache.poi.ss.usermodel.sheet; นำเข้า org.apache.poi.ss.usermodel.workbook; นำเข้า org.apache.poi.xssf.usermodel.xssfworkbook; นำเข้า org.springframework.web.multipart.Commons.Commonsmultipartfile นำเข้า java.io.*; นำเข้า Java.math.bigdecimal; นำเข้า java.util.arraylist; นำเข้า java.util.date; */คลาสสาธารณะ excelutils {// จำนวนทั้งหมดของแถวส่วนตัว int totalrows = 0; // จำนวนทั้งหมดของชิ้นส่วนรวม INT TOTALCELLS = 0; // ข้อความแสดงข้อผิดพลาดสตริงส่วนตัว errormsg; // วิธีการก่อสร้าง public excelutils () {} // รับจำนวนทั้งหมดของแถวสาธารณะ int getTotalrows () {return totalRows;} // รับจำนวนคอลัมน์ทั้งหมด int public int getTotalcells () {return totalcells;} // รับข้อความแสดงข้อผิดพลาด } / ** * ตรวจสอบไฟล์ excel * @param filepath * @return * / public boolean validateExcel (สตริง filepath) {ถ้า (filepath == null ||! (wdwutil.isexcel2003 (filepath) || wdwutil.isexcel2007 กลับเท็จ; } return true; } /** * อ่านไฟล์ excel และรับข้อมูลลูกค้า * @param * @return * /รายการสาธารณะ <otapolicymodel> getExcelInfo (ชื่อไฟล์สตริง, multipartfile mfile) {// แปลง multipartfile ที่อัปโหลดโดย Multiponsmultipartfile // รับไฟล์ path Storage Local Local = ไฟล์ใหม่ ("D: // fileUpload"); // สร้างไดเรกทอรี (ชื่อพา ธ ของมันถูกระบุโดยวัตถุไฟล์ปัจจุบันรวมถึงพา ธ พาเรนต์ใด ๆ ที่จำเป็น) ถ้า (! file.exists ()) file.mkdirs (); // สร้างไฟล์ไฟล์ใหม่ไฟล์ 1 = ไฟล์ใหม่ ("d: // fileupload" + วันที่ใหม่ (). getTime () + ".xlsx"); // เขียนไฟล์ที่อัปโหลดไปยังไฟล์ที่สร้างขึ้นใหม่ลอง {cf.getFileItem () เขียน (file1); } catch (exception e) {e.printstacktrace (); } // เริ่มต้นการรวบรวมรายการข้อมูลลูกค้า <OtapolicyModel> customerList = arrayList ใหม่ <OtapolicyModel> (); // เริ่มต้นอินพุตสตรีมอินพุทสตรีมคือ = null; ลอง {// ตรวจสอบว่าชื่อไฟล์มีคุณสมบัติหาก (! ValidateExcel (ชื่อไฟล์)) {return null; } // ค่าเริ่มต้นไม่ว่าจะเป็นเวอร์ชัน 2003 หรือเวอร์ชัน 2007 ตามชื่อไฟล์บูลีน isExcel2003 = true; if (wdwutil.isexcel2007 (ชื่อไฟล์)) {isExcel2003 = false; } // อินสแตนซ์อินพุตสตรีมตามไฟล์ที่สร้างขึ้นใหม่คือ = ใหม่ FileInputStream (file1); // อ่านข้อมูลลูกค้าตามเนื้อหาใน excel customerList = getExcelInfo (IS, ISEXCEL2003); is.close (); } catch (exception e) {e.printstacktrace (); } ในที่สุด {ถ้า (คือ! = null) {ลอง {is.close (); } catch (ioexception e) {is = null; E.PrintStackTrace (); }} ส่งคืนลูกค้ารายชื่อ; } / *** อ่านข้อมูลลูกค้าตามเนื้อหาใน excel* @param เป็นสตรีมอินพุต* @param isexcel2003 เป็น Excel 2003 หรือ 2007 เวอร์ชัน* @return* @throws ioexception* / รายการสาธารณะ <otapolicymodel> getExcelInfo ลอง { / ** เลือกวิธีการสร้างสมุดงานตามเวอร์ชัน* / เวิร์กบุ๊ก wb = null; // เมื่อ Excel เป็นปี 2003 ถ้า (isExcel2003) {wb = new hssfworkbook (IS); } else {// เมื่อ Excel คือ 2007 wb = New Xssfworkbook (IS); } // อ่านข้อมูลของลูกค้าใน excel customerList = readExcelValue (WB); } catch (ioexception e) {e.printstacktrace (); } ส่งคืนลูกค้ารายชื่อ; } /** * อ่านข้อมูลของลูกค้าใน excel * @param wb * @return * /รายการส่วนตัว <otapolicymodel> readExcelValue (เวิร์กบุ๊ก wb) {// รับแผ่นเชลล์แผ่นแรก = wb.getSheetat (0); // รับจำนวนแถวใน excel this.totalrows = sheet.getphysicalnumberofrows (); // รับจำนวนคอลัมน์ใน Excel (น่าจะมีแถว) ถ้า (TotalRows> = 1 && sheet.getrow (0)! = null) {this.totalcells = sheet.getRow (0) .getphysicalnumberofcells (); } รายการ <otapolicymodel> otapolicymodellist = arraylist ใหม่ <OtapolicyModel> (); Otapolicymodel Otapolicymodel; // หมายเลขแถว Excel เริ่มต้นจากบรรทัดที่สอง ชื่อไม่ได้ถูกเก็บไว้สำหรับ (int r = 1; r <totalrows; r ++) {row row = sheet.getrow (r); ถ้า (แถว == null) ดำเนินการต่อ; otapolicymodel = ใหม่ otapolicymodel (); ลอง {thread.currentthread (). นอนหลับ (1); } catch (interruptedException e) {e.printStackTrace (); } otapolicymodel.setPolicyId (System.currentTimeMillis ()); // การรวบรวม excel สำหรับ (int c = 0; c <this.totalcells; c ++) {เซลล์เซลล์ = row.getCell (c); if (null! = เซลล์) {ถ้า (c == 0) {otapolicymodel.setSource (cell.getStringCellValue ()); // ซัพพลายเออร์} อื่นถ้า (c == 1) {otapolicymodel.setVendee (cell.getStringCellValue () if (cell.getStringCellValue () == "all") {triptype = 0; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ทางเดียว")) {tripType = 10; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("การเดินทางไปกลับ")) {triptype = 20; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("เที่ยวบินโดยตรงทางเดียว")) {tripType = 11; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("การเดินทางไปกลับ")) {triptype = 12; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("การเดินทางไปกลับ")) {triptype = 21; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("การเดินทางไปกลับ")) {triptype = 21; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("การเดินทางไปกลับ")) {triptype = 22; } otapolicymodel.setTripType (triptype); // ประเภทการเดินทาง} อื่นถ้า (c == 3) {otapolicymodel.setCarrier (cell.getStringCellValue (); เมือง} อื่นถ้า (c == 5) {otapolicymodel.setArcity (cell.getStringCellValue ()); // Landing City} อื่นถ้า (C == 6) {Otapolicymodel.setsalebegindatel (ใหม่ bigdecimal (cell.getNumericCellValue ()). setScale (0, bigdecimal.round_half_down) .longvalue ()); // วันที่เริ่มต้นขาย} ถ้า (c == 7) {Otapolicymodel.setsaleendDatel (ใหม่ bigdecimal (cell.getNumericCellValue ()). setScale (0, bigdecimal.round_half_down) .longvalue ()); // วันที่สิ้นสุดการขาย} อื่นถ้า (c == 8) bigdecimal (cell.getNumericCellValue ()). setScale (0, bigdecimal.round_half_down) .longvalue ()); // วันที่เริ่มต้นการเดินทาง} ถ้า (c == 9) {Otapolicymodel.SetTravelendDatel (ใหม่ bigdecimal (cell.getNumericCellValue ()). setScale (0, bigdecimal.round_half_down) .longvalue ()); // วันที่สิ้นสุดการเดินทาง} ถ้า (c == 10) {int cabinpe = 9; if (cell.getStringCellValue (). เท่ากับ ("ทั้งหมด")) {cabintype = 9; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ชั้นประหยัด")) {cabintype = 1; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ธุรกิจ")) {cabintype = 2; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ชั้นหนึ่ง")) {cabintype = 3; } otapolicymodel.setCobintype (cabintype); // ระดับ cadrift} อื่นถ้า (c == 11) {otapolicymodel.setfdType (cell.getStringCellue () {cell.getStringCellue () otapolicymodel.setCabin (cell.getStringCellValue ()); // cat} อื่นถ้า (c == 13) {otapolicymodel.setpriceBegin (cell.getNumericCellValue ()); // ราคาต่ำสุด} อื่น ๆ otapolicymodel.setPriceend (cell.getNumericCellValue ()); // ราคาสูงสุด} อื่นถ้า (c == 15) {otapolicymodel.setlMoney (cell.getNumericCellValue ()); // ประหยัดเงิน} อื่น ๆ otapolicymodel.setfpercent (cell.getNumericCellValue ()); // การคืนราคาเต็มราคา} อื่นถ้า (c == 17) {otapolicymodel.setftftpercent (cell.getNumericCellValue ()); // โปรดคืนเงินอื่น ๆ if (cell.getStringCellValue (). เท่ากับ ("ใช่")) {carrierLimit = 1; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ไม่")) {carrierLimit = 0; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ไม่มี")) {carrierLimit = 2; } otapolicymodel.setCarrierLimit (carrierLimit); // ข้อ จำกัด ของสายการบินใบแจ้งหนี้} อื่นถ้า (c == 19) {int transport = 2; if (cell.getStringCellValue (). เท่ากับ ("ใช่")) {transport = 1; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ไม่")) {transport = 0; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ไม่")) {transport = 0; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ไม่")) {transport = 0; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ไม่")) {transport = 0; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ไม่")) {transport = 0; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ไม่")) {transport = 0; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ไม่ จำกัด ")) {transport = 2; } otapolicymodel.setTransport (การขนส่ง); // สนับสนุนการขนส่ง intermodal} อื่นถ้า (c == 20) {int sharedflight = 2; if (cell.getStringCellValue (). เท่ากับ ("ใช่")) {SharedFlight = 1; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ไม่")) {SharedFlight = 0; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ไม่มี")) {SharedFlight = 2; } otapolicymodel.setsharedflight (SharedFlight); // สนับสนุนเที่ยวบินที่ใช้ร่วมกัน} อื่นถ้า (C == 21) {Otapolicymodel.setPstatus (cell.getStringCellValue () เท่ากับ ("ถูกต้อง" if (cell.getStringCellValue (). เท่ากับ ("ส่วนตัว")) {faretype = 1; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("สิ่งพิมพ์")) {faretype = 2; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("สิ่งพิมพ์")) {faretype = 2; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ทั้งหมด")) {faretype = 0; } otapolicymodel.setfaretype (faretype); // ประเภทการขนส่ง} อื่นถ้า (c == 23) {otapolicymodel.setLimitPrice (ใหม่ bigdecimal (cell.getNumericCellValue ()) if (c == 24) {int limitTransit = 2; if (cell.getStringCellValue (). เท่ากับ ("ทั้งหมด")) {limitTransit = 2; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ใช้ได้")) {LimitTransit = 0; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ไม่สามารถใช้ได้")) {LimitTransit = 1; } otapolicymodel.setLimitTransit (LimittRansit); // ขีด จำกัด การเปลี่ยนแปลง} อื่นถ้า (c == 25) {otapolicymodel.setArcity (cell.getStringCellValue ()); // การเปลี่ยนแปลงเมือง} อื่นถ้า (C == 26) if (cell.getStringCellValue (). เท่ากับ ("ทั้งหมด")) {limitNation = 2; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ใช้ได้")) {LimitNation = 0; } อื่นถ้า (cell.getStringCellValue (). เท่ากับ ("ไม่สามารถใช้ได้")) {LimitNation = 1; } otapolicymodel.setLimitNation (Limitnation); // ขีด จำกัด สัญชาติ} อื่นถ้า (c == 27) {otapolicymodel.setArcity (cell.getStringCellValue ()); // สัญชาติ} ถ้า (c == 28) {otapolicymodel. } // เพิ่มลูกค้า otapolicymodellist.add (otapolicymodel); } return otapolicymodellist; -คลาสเครื่องมือ wdwutil.java
แพ็คเกจ com.flight.inter.otaadapter.commons.util;/*** สร้างโดย ling.zhang เมื่อ 2016/12/29 */ คลาสสาธารณะ wdwutil {// @description: ไม่ว่าจะเป็น Excel of 2003, return true คือ 2003 บูลีนสแตติกสาธารณะ isexcel2003 (สตริง filepath) {return filepath.matches ("^.+/. (? i) (xls) $"); } //@คำอธิบาย: ไม่ว่าจะเป็น Excel of 2007, Return True เป็น 2007public boolean คงที่ isexcel2007 (String filepath) {return filepath.matches ("^.+//. (? i) (xlsx) $");}}}}หมายเหตุ: เพื่อความสะดวกในการอ่านรหัสด้านบนจะถูกโพสต์ครั้งแรกด้วยวิธีการหลักและจากนั้นวิธีการของเด็ก ในการแก้ไขรหัสจริงวิธีการเด็กโดยทั่วไปจะถูกแก้ไขครั้งแรกแล้วแก้ไขด้วยวิธีการหลัก ตัวอย่างเช่นข้างต้นควรแก้ไขรหัสคลาสเครื่องมือก่อนจากนั้นแก้ไขรหัสเลเยอร์บริการและในที่สุดก็แก้ไขรหัสคอนโทรลเลอร์
ด้วยวิธีนี้กระบวนการทั้งหมดก็โอเค นำไปทดสอบตอนนี้
สำหรับเนื้อหาที่น่าตื่นเต้นเพิ่มเติมโปรดคลิก "อัปโหลดฤดูใบไม้ผลิและดาวน์โหลดหัวข้อพิเศษ" สำหรับการศึกษาเชิงลึกและการวิจัย
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น