สร้างไฟล์ Excel อย่างง่าย
ในสำนักงานจริงเรามักจะมีข้อกำหนด: เราต้องการให้รายงานเปิดโดยตรงใน Excel มีความต้องการเช่นนี้ในระหว่างการฝึกงาน สอบถามข้อมูลทั้งหมดของไฟล์แนบที่ได้รับจากผู้ใช้ตามทรัพยากรที่เลือกและสร้าง Excel สำหรับการดาวน์โหลด อย่างไรก็ตามเมื่อสอบถามเราจำเป็นต้องตรวจสอบว่ามีข้อผิดพลาดใด ๆ ในข้อมูลในไฟล์แนบที่ผู้ใช้ให้ (บัตรประจำตัวประชาชน) หรือไม่ มีข้อผิดพลาดในการสร้างข้อความแสดงข้อผิดพลาด Excel
ปัจจุบันโครงการ POI ของ Apache เป็นอินเทอร์เฟซ HSSF ที่ค่อนข้างเป็นผู้ใหญ่ที่ใช้ในการประมวลผลวัตถุ Excel ในความเป็นจริง POI ไม่เพียง แต่จัดการกับ Excel เท่านั้น แต่ยังสามารถจัดการกับ Word, PowerPoint, Visio และ Outlook ได้
ที่นี่ฉันจะแนะนำวิธีการสร้าง Excel โดยใช้ POI
ก่อนอื่นก่อนที่จะสร้าง Excel เราต้องเข้าใจองค์กรของไฟล์ Excel ใน POI มันเป็นที่เข้าใจดังนี้: ไฟล์ Excel สอดคล้องกับสมุดงานและสมุดงานประกอบด้วยหลายแผ่น แผ่นงานมีหลายแถวและแถวโดยทั่วไปมีหลายเซลล์
สำหรับคำนามสี่คำข้างต้นเราสามารถเข้าใจได้ในรูปด้านล่าง
สำหรับการสร้าง Excel POI จะจัดเตรียมวัตถุพื้นฐานต่อไปนี้:
จากภาพด้านบนและโครงสร้างองค์กร Excel เราสามารถเข้าใจขั้นตอนในการสร้าง Excel
1. สร้างเอกสารเอกสาร HSSHWORKBOOK
2. สร้างแบบฟอร์ม HSSFSheet ผ่าน HSSFWORKBOOK
3. สร้างแถวผ่าน HSSFSheet
4. สร้างเซลล์ HSSFCELL ผ่าน HSSFROW
นี่คือรหัสการแสดงผล:
Bean Error Identity Card (ErrorCondition.java)
ข้อผิดพลาดของคลาสสาธารณะ {ชื่อสตริงส่วนตัว; // ชื่อ Idcard สตริงส่วนตัว; // ID บัตรสถานะสตริงส่วนตัว; // สถานะข้อผิดพลาดข้อความสตริงส่วนตัว; // ข้อความแสดงข้อผิดพลาดข้อผิดพลาด (ชื่อสตริง, string idcard, สถานะสตริง, ข้อความสตริง) {this.name = name; this.idcard = idcard; this.status = สถานะ; this.message = ข้อความ; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } สตริงสาธารณะ getIdCard () {return idcard; } โมฆะสาธารณะ setIdCard (string idcard) {this.idcard = idcard; } สตริงสาธารณะ getStatus () {สถานะการส่งคืน; } โมฆะสาธารณะ setStatus (สถานะสตริง) {this.status = สถานะ; } สตริงสาธารณะ getMessage () {ส่งคืนข้อความ; } โมฆะสาธารณะ setMessage (ข้อความสตริง) {this.message = ข้อความ; -คลาสการประมวลผล (ExporterRorexcel.java)
Public Class ExporterRorexcel {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {// ขั้นตอนที่ 1 สร้างเวิร์กบุ๊ก hssfworkbook wb = hssfworkbook ใหม่ (); // ขั้นตอนที่ 2 สร้างแผ่นงาน HSSFSheet = WB.Createsheet ("ข้อความแสดงข้อผิดพลาดบัตรประจำตัว"); // ขั้นตอนที่ 3 สร้างแถวแถว: เพิ่ม 0 แถวของส่วนหัวตาราง HSSFROW ROW = Sheet.Createrow (0); สไตล์ hssfcellstyle = wb.createCellstyle (); style.setAlignment (hssfcellstyle.align_center); // center // ขั้นตอนที่ 4: สร้างเซลล์ hssfcell เซลล์ = row.createCell (0); // เซลล์เซลล์แรก SetCellValue ("ชื่อ"); // ตั้งค่า cell.setCellStyle (สไตล์); // เซลล์เนื้อหากลาง = row.createCell (1); // เซลล์เซลล์ที่สอง setCellValue ("บัตรประจำตัวประชาชน"); cell.setcellstyle (สไตล์); เซลล์ = row.createCell (2); // เซลล์เซลล์ที่สาม SetCellValue ("สถานะข้อผิดพลาด"); cell.setcellstyle (สไตล์); เซลล์ = row.createCell (3); // เซลล์เซลล์ที่สี่ SetCellValue ("ข้อความแสดงข้อผิดพลาด"); cell.setcellstyle (สไตล์); // ขั้นตอนที่ห้าแทรกรายการข้อมูล <SRORCONDITION> รายการ = ExporterRorexcel.getERRORCONDITION (); สำหรับ (int i = 0; i <list.size (); i ++) {errorcondition errorcondition = list.get (i); // สร้าง row = sheet.createrow (i+1); // สร้างเซลล์และเพิ่ม Data Row.CreateCell (0) .SetCellValue (ErrorCondition.getName ()); row.createCell (1) .setCellValue (ErrorCondition.getIdCard ()); row.createCell (2) .setCellValue (ErrorCondition.getStatus ()); row.createCell (3) .setCellValue (ErrorCondition.getMessage ()); } // ขั้นตอนที่ 6 บันทึกไฟล์ Excel ที่สร้างขึ้นไปยังเส้นทางที่ระบุลอง {fileOutputStream fout = ใหม่ fileOutputStream ("d: //errorcondition.xls"); wb.write (fout); fout.close (); } catch (ioexception e) {e.printstacktrace (); } system.out.println ("การสร้างไฟล์ Excel สำเร็จ ... "); } รายการคงที่สาธารณะ <SRORCONDITION> getERRORCONDITION () {รายการ <SRORCONDITION> รายการ = arrayList ใหม่ <SRORCONDITION> (); ข้อผิดพลาด R1 = ข้อผิดพลาดใหม่ ("Zhang San", "4306821989021611", "L", "ข้อผิดพลาดความยาว"); ข้อผิดพลาด R2 = ข้อผิดพลาดใหม่ ("Li Si", "430682198902191112", "X", "ตรวจสอบข้อผิดพลาด"); ข้อผิดพลาด R3 = ข้อผิดพลาดใหม่ ("วังวู", "", "n", "ข้อมูลบัตรประจำตัวว่างเปล่า"); list.add (R1); list.add (R2); list.add (R3); รายการคืน; - ผ่านขั้นตอนหกขั้นตอนข้างต้นคุณสามารถสร้างไฟล์ Excel ในตำแหน่งที่ระบุ
การใช้งาน Java Poi แทรกรูปภาพลงใน Excel
การพัฒนาเว็บเป็นสิ่งที่หลีกเลี่ยงไม่ได้ที่จะจัดการกับ Excel วันนี้เจ้านายให้งานฉัน - ส่งออก Excel สิ่งที่ฉันคิดในตอนแรกค่อนข้างง่ายมันเป็นเพียงการค้นหาสร้าง Excel และดาวน์โหลดการตอบกลับ แต่มีความแตกต่างอย่างหนึ่งนั่นคือคุณต้องเพิ่มรูปภาพมันเป็นภาพที่เพิ่มเข้ามาเป็นเวลานาน ในเวลาเดียวกันไม่พบข้อมูลที่ดีบนอินเทอร์เน็ตดังนั้นฉันจึงเขียนโพสต์บล็อกนี้เพื่อบันทึกสำหรับตัวฉันเองและเพื่อนบล็อกของฉันเพื่อสอบถามและอ้างอิง
มีวัตถุ HSSFPATRIARCH ใน POI ซึ่งเป็นผู้จัดการอันดับต้น ๆ สำหรับการวาดภาพ วิธี createpicture (anchor, pictureIndex) สามารถแทรกรูปภาพใน Excel ดังนั้นคุณต้องแทรกรูปภาพใน Excel และคุณสามารถทำได้ในสามขั้นตอน 1. รับวัตถุ HSSFPATRIARCH, 2. วัตถุ HSSFClientAnchor ใหม่, 3. เพียงเรียกใช้วิธีการสร้างสรรค์ การนำไปใช้เป็นเรื่องง่ายมากที่จะใช้งาน แต่ก็ยังยากที่จะทำได้ดี ที่นี่เราแทรกรูปภาพก่อน:
คลาสสาธารณะ excelimagetest {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {fileOutputStream fileout = null; bufferedImage bufferimg = null; // ก่อนที่จะใส่การอ่านในรูปภาพลงใน byteArrayOutputStream เพื่อสร้าง byteArray ลอง {byteArrayOutputStream byteArrayout = new ByTeArrayOutputStream (); bufferimg = imageio.read (ไฟล์ใหม่ ("f: /picture/anounty/xiaozha11.jpg")); imageio.write (bufferimg, "jpg", bytearrayout); hssfworkbook wb = new hssfworkbook (); hssfsheet sheet1 = wb.createsheet ("รูปภาพทดสอบ"); // ผู้จัดการอันดับต้น ๆ สำหรับการวาดสามารถรับได้เพียงแผ่นเดียว (อย่าลืมใส่ใจกับจุดนี้) HSSFPATRIARCH PATRIARCH = Sheet1.CreatedRawingPatriarch (); // สมอส่วนใหญ่ใช้เพื่อตั้งค่าแอตทริบิวต์ของรูปภาพ HSSFClientanChor Anchor = HSSFClientanchor ใหม่ (0, 0, 255, 255, (สั้น) 1, 1, (สั้น) 5, 8); Anchor.setanchortype (3); // แทรกภาพ Patriarch.CreatePicture (Anchor, WB.AddPicture (ByteArrayout.tobyteArray (), hssfworkbook.picture_type_jpeg)); fileout = ใหม่ fileOutputStream ("d:/test excel.xls"); // เขียนไปยังไฟล์ excel wb.write (fileout); System.out.println ("--------"); } catch (exception e) {e.printstacktrace (); } ในที่สุด {ถ้า (fileout! = null) {ลอง {fileout.close (); } catch (ioexception e) {e.printstacktrace (); - ต่อไปนี้เป็นผลลัพธ์หลังจากดำเนินการ:
สำหรับสาเหตุที่ผลลัพธ์นี้ส่วนใหญ่เป็นเพราะ hssfclientanchor (0, 0, 255, 255, (สั้น) 1, 1, (สั้น) 5, 8) ตัวสร้าง ให้ฉันอธิบายคอนสตรัคเตอร์นี้ด้านล่าง: HSSFClientanChor (int DX1, int DY1, int DX2, int DY2, COL1 สั้น, row1, row1, col2 สั้น, row2, int row2); ความหมายของแต่ละพารามิเตอร์มีดังนี้:
ที่นี่ DX1 และ DY1 กำหนดตำแหน่งเริ่มต้นของภาพที่เซลล์เริ่มต้นและ DX2 และ DY2 กำหนดตำแหน่งสิ้นสุดของเซลล์ปลาย COL1 และ ROW1 กำหนดเซลล์เริ่มต้น COL2 และ ROW2 กำหนดเซลล์ปลาย
ต่อไปนี้ถูกสร้างขึ้นด้วยตัวสร้างที่แตกต่างกันสองตัว จากภาพนี้เราสามารถเห็นความหมายและความแตกต่างของพารามิเตอร์แปดข้างต้นได้อย่างชัดเจน
ด้านบนคือการแทรกภาพเดียวดังนั้นสิ่งที่เกี่ยวกับการแทรกหลายภาพ? ในความเป็นจริงมันง่ายมาก สร้างวัตถุ HSSFClientanChor ที่แตกต่างกันหลายรายการและควบคุมพารามิเตอร์ทั้งแปดเหล่านั้นดังนี้:
HSSFClientanchor Anchor1 = ใหม่ HSSFClientanchor (0, 0, 1023,100, (สั้น) 1, 1, (สั้น) 5, 8); HSSFClientAnchor Anchor2 = ใหม่ HSSFClientanchor (0, 0, 1023,100, (สั้น) 1, 9, (สั้น) 5, 16); // แทรกภาพ patriarch.createpicture (anchor1, wb.addpicture (bytearrayout.tobytearray (), hssfworkbook.picture_type_jpeg)); Patriarch.CreatePicture (Anchor2, WB.AddPicture (ByteArrayout.tobyteArray (), hssfworkbook.picture_type_jpeg));
ส่วนที่เหลือของรหัสเหมือนกันและได้ผลลัพธ์ต่อไปนี้: