การดำเนินการนำเข้าและส่งออก Java ของ Excel (jxl)
Java ตีความข้อมูล Excel (การใช้แพ็คเกจ jxl.jar)
คำสำคัญ: java excel jxl.jar
ที่อยู่ดาวน์โหลดแพ็คเกจ jxl.jar:
http://www.andykhan.com/jexcelapi/
ที่อยู่ดาวน์โหลดจริง:
http://www.andykhan.com/jexcelapi/download.html
ลักษณะของมันมีการอธิบายไว้บนเว็บไซต์ดังนี้:
● รองรับ Excel 95-2000 ทุกเวอร์ชัน ● สร้างรูปแบบมาตรฐานของ Excel 2000 ● รองรับการดำเนินการแบบอักษร ตัวเลข และวันที่ ● สามารถแก้ไขแอตทริบิวต์ของเซลล์ได้ ● รองรับรูปภาพและแผนภูมิ ควรกล่าวว่าฟังก์ชันข้างต้นสามารถตอบสนองความต้องการของเราได้คร่าวๆ สิ่งที่สำคัญที่สุดคือ API นี้เป็น Java ล้วนๆ และไม่ได้ขึ้นอยู่กับระบบ Windows แม้ว่าจะทำงานบน Linux แต่ก็ยังสามารถประมวลผลไฟล์ Excel ได้อย่างถูกต้อง ควรสังเกตว่าชุด API นี้มีการรองรับกราฟิกและแผนภูมิที่จำกัดมากและยอมรับเฉพาะรูปแบบ PNG เท่านั้น
หากต้องการสร้างสภาพแวดล้อม ให้แตกไฟล์ที่ดาวน์โหลดเพื่อรับ jxl.jar ใส่ลงใน classpath และการติดตั้งเสร็จสมบูรณ์
การดำเนินงานขั้นพื้นฐาน
1. สร้างไฟล์เพื่อสร้างไฟล์ Excel ชื่อ "Test Data.xls" โดยเวิร์กชีตแรกมีชื่อว่า "หน้าแรก" ลักษณะพิเศษทั่วไปมีดังนี้:
รหัสจาวา
-
* จัดทำเมื่อ 30 ธันวาคม 2550
-
* หากต้องการเปลี่ยนเทมเพลตสำหรับไฟล์ที่สร้างขึ้นนี้ ให้ไปที่
* หน้าต่าง>การตั้งค่า>Java>การสร้างโค้ด>โค้ดและความคิดเห็น
-
แพ็คเกจ JExcelTest.standard;
นำเข้า java.io.*;
นำเข้า jxl.*;
นำเข้า jxl.write.*;
-
* @ผู้เขียน เคน
-
* หากต้องการเปลี่ยนเทมเพลตสำหรับความคิดเห็นประเภทที่สร้างขึ้นนี้ ให้ไปที่
* หน้าต่าง>การตั้งค่า>Java>การสร้างโค้ด>โค้ดและความคิดเห็น
-
CreateXLS คลาสสาธารณะ {
โมฆะคงที่สาธารณะ main (String [] args) {
พยายาม {
//เปิดไฟล์.
หนังสือ WritableWorkbook = Workbook.createWorkbook (ไฟล์ใหม่ ("d:/Test.xls"));
//สร้างชีตชื่อ "Sheet_1" 0 หมายถึงนี่คือหน้าแรก
แผ่นเขียนได้ = book.createSheet("Sheet_1", 0);
//กำหนดคอลัมน์และแถวของเซลล์ใน Label Constructor และเนื้อหาของเซลล์เขียนว่า "test"
//เซลล์คือคอลัมน์ที่ 1 ค่าของแถวที่ 1 คือ "ทดสอบ"
ป้ายกำกับ ป้ายกำกับ = ป้ายกำกับใหม่ (0, 0, "ทดสอบ");
//เพิ่มเซลล์ที่กำหนดไว้ด้านบนไปยังอินสแตนซ์ของชีต
sheet.addCell(ฉลาก);
//สร้างเซลล์โดยใช้การเพิ่มตัวเลข คำเตือน: จำเป็นต้องใช้แพ็คเกจพาธแบบรวม ไม่เช่นนั้นจะเกิดข้อผิดพลาดกับพาธ
//เซลล์คือคอลัมน์ที่ 2 แถวที่ 1 คือ 789.123
jxl.write.Number number = ใหม่ jxl.write.Number(1, 0, 789.123);
//เพิ่มเซลล์ที่กำหนดไว้ด้านบนไปยังอินสแตนซ์ของชีต
sheet.addCell(หมายเลข);
//เพิ่มเซลล์ทั้งหมดที่กำหนดไว้ด้านบนเป็นตัวพิมพ์เล็กและใหญ่
หนังสือ.write();
//ปิดคดีไฟล์.
หนังสือ.ปิด();
} จับ (ข้อยกเว้นจ) {
e.printStackTrace();
-
-
-
หลังจากคอมไพล์และรัน Java แล้ว ไฟล์ Excel จะถูกสร้างขึ้นที่ตำแหน่งปัจจุบัน
2. อ่านไฟล์ นำไฟล์ Excel ที่เราเพิ่งสร้างขึ้นมาเป็นตัวอย่างเพื่อดำเนินการอ่านโค้ดอย่างง่ายดังนี้:
รหัสจาวา
-
* จัดทำเมื่อ 30 ธันวาคม 2550
-
* หากต้องการเปลี่ยนเทมเพลตสำหรับไฟล์ที่สร้างขึ้นนี้ ให้ไปที่
* หน้าต่าง>การตั้งค่า>Java>การสร้างโค้ด>โค้ดและความคิดเห็น
-
แพ็คเกจ JExcelTest.standard;
นำเข้า java.io.*;
นำเข้า jxl.*;
-
* @ผู้เขียน เคน
-
* หากต้องการเปลี่ยนเทมเพลตสำหรับความคิดเห็นประเภทที่สร้างขึ้นนี้ ให้ไปที่
* หน้าต่าง>การตั้งค่า>Java>การสร้างโค้ด>โค้ดและความคิดเห็น
-
ReadXLS คลาสสาธารณะ {
โมฆะคงที่สาธารณะ main (String [] args) {
พยายาม {
สมุดงาน = Workbook.getWorkbook(ไฟล์ใหม่("d:/Test.xls"));
//รับวัตถุชีต
แผ่นชีท = book.getSheet(0);
// รับเนื้อหาคอลัมน์ที่ 1 แถวที่ 1
เซลล์เซลล์ = sheet.getCell(0, 0);
ผลลัพธ์สตริง = cell.getContents();
System.out.println (ผลลัพธ์);
หนังสือ.ปิด();
} จับ (ข้อยกเว้นจ) {
e.printStackTrace();
-
-
-
ผลการรันโปรแกรม: ทดสอบ
3. แก้ไขไฟล์ คุณสามารถใช้ jExcelAPI เพื่อแก้ไขไฟล์ Excel ที่มีอยู่ได้ เมื่อแก้ไขไฟล์ Excel ยกเว้นวิธีการเปิดไฟล์ที่แตกต่างกัน การดำเนินการอื่นๆ จะเหมือนกับการสร้าง Excel ตัวอย่างต่อไปนี้เพิ่มแผ่นงานลงในไฟล์ Excel ที่เราสร้างขึ้น:
แก้ไขคลาส Excel และเพิ่มแผ่นงาน
รหัสจาวา
-
* จัดทำเมื่อ 30 ธันวาคม 2550
-
* หากต้องการเปลี่ยนเทมเพลตสำหรับไฟล์ที่สร้างขึ้นนี้ ให้ไปที่
* หน้าต่าง>การตั้งค่า>Java>การสร้างโค้ด>โค้ดและความคิดเห็น
-
แพ็คเกจ JExcelTest.standard;
นำเข้า java.io.*;
นำเข้า jxl.*;
นำเข้า jxl.write.*;
-
* @ผู้เขียน เคน
-
* หากต้องการเปลี่ยนเทมเพลตสำหรับความคิดเห็นประเภทที่สร้างขึ้นนี้ ให้ไปที่
* หน้าต่าง>การตั้งค่า>Java>การสร้างโค้ด>โค้ดและความคิดเห็น
-
UpdateXLS คลาสสาธารณะ {
โมฆะคงที่สาธารณะ main (String [] args) {
พยายาม {
//รับไฟล์.
สมุดงาน wb = Workbook.getWorkbook(ไฟล์ใหม่("d:/Test.xls"));
//เปิดไฟล์คัดลอก (ไฟล์ใหม่) จากนั้นเขียนเนื้อหาที่มีเนื้อหาเดียวกันด้วย Test.xls
หนังสือสมุดงานแบบเขียนได้ =
Workbook.createWorkbook(ไฟล์ใหม่("d:/Test.xls"), wb);
//เพิ่มชีต
แผ่นเขียนได้ = book.createSheet("Sheet_2", 1);
sheet.addCell(ป้ายกำกับใหม่ (0, 0, "test2"));
หนังสือ.write();
หนังสือ.ปิด();
} จับ (ข้อยกเว้นจ) {
e.printStackTrace();
-
-
-
การดำเนินงานขั้นสูง
1. การจัดรูปแบบข้อมูลใน Excel ไม่มีประเภทข้อมูลที่ซับซ้อน สามารถจัดการสตริง ตัวเลข และวันที่ได้ค่อนข้างดี และเพียงพอสำหรับการใช้งานทั่วไป
การจัดรูปแบบสตริง การจัดรูปแบบสตริงเกี่ยวข้องกับองค์ประกอบต่างๆ เช่น แบบอักษร ความหนา ขนาดแบบอักษร ฯลฯ ฟังก์ชันเหล่านี้ส่วนใหญ่จะรับผิดชอบคลาส WritableFont และ WritableCellFormat สมมติว่าเราใช้คำสั่งต่อไปนี้เมื่อสร้างเซลล์ที่มีสตริง เพื่อความสะดวกในการอธิบาย เราจะกำหนดหมายเลขแต่ละบรรทัดของคำสั่ง:
WritableFont font1= WritableFont ใหม่ (WritableFont.TIMES,16,WritableFont.BOLD);
หรือ
//กำหนดรูปแบบตัวอักษรให้เป็นรูปแบบที่ Excel รองรับ
WritableFont font3=ใหม่ WritableFont(WritableFont.createFont("楷体_GB2312"),12,WritableFont.NO_BOLD );
1 WritableCellFormat format1=รูปแบบ WritableCellFormat ใหม่ (font1);
2 ป้ายกำกับ = ป้ายกำกับใหม่ (0,0” การทดสอบข้อมูล 4”, รูปแบบ 1)
3.ในหมู่พวกเขา
I. ระบุรูปแบบสตริง: แบบอักษรคือ TIMES ขนาดแบบอักษรคือ 16 และแสดงเป็นตัวหนา WritableFont มีชุดตัวสร้างที่หลากหลายมากสำหรับใช้ในสถานการณ์ที่แตกต่างกัน มีรายการโดยละเอียดใน java-doc ของ jExcelAPI ซึ่งจะไม่แสดงอยู่ที่นี่
II. โค้ดด้านบนใช้คลาส WritableCellFormat คลาสนี้มีความสำคัญมาก โดยจะมีคำอธิบายเพิ่มเติมในการจัดรูปแบบเซลล์ในภายหลัง
III ตัวสร้างของคลาส Label ใช้เพื่อระบุรูปแบบที่กำหนดสตริง ในคลาส WritableCellFormat อีกวิธีที่สำคัญมากคือการระบุการจัดตำแหน่งของข้อมูล ตัวอย่างเช่น สำหรับตัวอย่างข้างต้น คุณสามารถระบุ:
//ระบุการจัดตำแหน่งแนวนอนให้อยู่กึ่งกลาง
format1.setAlignment(jxl.format.Alignment.CENTRE);
//ระบุการจัดตำแหน่งแนวตั้งให้อยู่กึ่งกลาง
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
//ตั้งค่าการตัดบรรทัดอัตโนมัติ
format1.setWrap(จริง);
2. การทำงานของเซลล์
ส่วนที่สำคัญมากของ Excel คือการทำงานของเซลล์ เช่น ความสูงของแถว ความกว้างของคอลัมน์ การรวมเซลล์ ฯลฯ โชคดีที่ jExcelAPI ให้การสนับสนุนเหล่านี้ การดำเนินการเหล่านี้ค่อนข้างง่ายและมีการแนะนำเฉพาะ API ที่เกี่ยวข้องด้านล่างนี้
1. ผสานเซลล์
WritableSheet.mergeCells(int m,int n,int p,int q);
ฟังก์ชันคือการรวมเซลล์ทั้งหมดจาก (m,n) ถึง (p,q) ตัวอย่างเช่น:
WritableSheet sheet=book.createSheet("หน้าแรก",0);
//รวมเซลล์ทั้งหมดจากแถวแรกของคอลัมน์แรกไปยังแถวแรกของคอลัมน์ที่หก
sheet.mergeCells(0,0,5,0);
การควบรวมกิจการอาจเป็นได้ทั้งแนวนอนหรือแนวตั้ง เซลล์ที่ผสานแล้วไม่สามารถรวมอีกครั้งได้ มิฉะนั้นจะทำให้เกิดข้อยกเว้น
2. ความสูงของแถวและความกว้างของคอลัมน์
WritableSheet.setRowView(int i,int ความสูง);
ฟังก์ชันคือระบุความสูงของแถว i+1 ตัวอย่างเช่น:
//กำหนดความสูงของแถวแรกเป็น 200
sheet.setRowView(0,200);
WritableSheet.setColumnView(int i,int width);
ฟังก์ชันคือระบุความกว้างของคอลัมน์ i+1 เช่น
//กำหนดความกว้างของคอลัมน์แรกเป็น 30
sheet.setColumnView(0,30);
3. รูปภาพการทำงาน
รหัสจาวา
โมฆะสาธารณะคงที่เขียน () พ่นข้อยกเว้น {
WritableWorkbook wwb=Workbook.createWorkbook(ไฟล์ใหม่("c:/1.xls"));
WritableSheet ws=wwb.createSheet("แผ่นทดสอบ 1",0);
ไฟล์ file=ไฟล์ใหม่ ("C:\jbproject\PVS\WebRoot\weekhit\1109496996281.png");
รูปภาพที่เขียนได้ = รูปภาพที่เขียนได้ใหม่ (1, 4, 6, 18, ไฟล์);
ws.addImage(รูปภาพ);
www.write();
www.ปิด();
-
มันง่ายมากและเหมือนกับวิธีการแทรกเซลล์ แต่มีพารามิเตอร์มากกว่า คลาส WritableImage สืบทอด Draw ข้างต้นเป็นเพียงหนึ่งในวิธีการก่อสร้าง ไม่จำเป็นต้องพูดว่าพารามิเตอร์สุดท้ายเป็นประเภท double โดย x, y, ความกว้าง, ความสูง โปรดทราบว่าความกว้างและความสูงในที่นี้ไม่ใช่ความกว้างและความสูงของรูปภาพ แต่เป็นจำนวนหน่วยที่รูปภาพครอบครอง เพราะมันสืบทอด Draw ประเภทของมันจึงต้องเป็นสองเท่า ฉันไม่ได้ดูรายละเอียดวิธีการนำไปใช้ :) เนื่องจากฉันกำลังเร่งรีบ ฉันจะทำงานให้เสร็จก่อน และฉันจะมีเวลาศึกษาส่วนที่เหลือในภายหลัง ฉันจะเขียนประสบการณ์การใช้งานของฉันต่อไปในอนาคต
อ่าน:
เมื่ออ่านแนวคิดจะเป็นดังนี้ ขั้นแรกให้ใช้อินพุตสตรีม (InputStream) เพื่อรับไฟล์ Excel จากนั้นใช้ Workbook ใน jxl เพื่อรับเวิร์กบุค ใช้ Sheet เพื่อรับเวิร์กชีทจากสมุดงาน และใช้ Cell เพื่อรับ จุดใดจุดหนึ่งในเซลล์งาน
InputStream->Workbook->Sheet->Cell คุณจะได้รับเซลล์ในไฟล์ Excel
รหัสจาวา
String path="c:\excel.xls";//URL ของไฟล์ Excel
InputStream คือ = new FileInputStream(path);//เขียนไปที่ FileInputStream
jxl.Workbook wb = Workbook.getWorkbook(is); // รับสมุดงาน
jxl.Sheet st = wb.getSheet(0);//รับแผ่นงานแรกในสมุดงาน
Cell cell=st.getCell(0,0);//รับเซลล์แรกของเวิร์กชีต ซึ่งก็คือ A1
String content=cell.getContents();//getContents() แปลงอักขระใน Cell ให้เป็นสตริง
wb.close();//ปิดสมุดงาน
is.close();//ปิดสตรีมอินพุต
String path="c:\excel.xls";//URL ของไฟล์ Excel
InputStream คือ = new FileInputStream(path);//เขียนไปที่ FileInputStream
jxl.Workbook wb = Workbook.getWorkbook(is); // รับสมุดงาน
jxl.Sheet st = wb.getSheet(0);//รับแผ่นงานแรกในสมุดงาน
Cell cell=st.getCell(0,0);//รับเซลล์แรกของเวิร์กชีต ซึ่งก็คือ A1
String content=cell.getContents();//getContents() แปลงอักขระใน Cell ให้เป็นสตริง
wb.close();//ปิดสมุดงาน
is.close();//ปิดสตรีมอินพุต เราสามารถรับเซลล์ใดก็ได้ผ่านเมธอด getCell(x,y) ของชีต และ x, y สอดคล้องกับพิกัดใน Excel
ตัวอย่างเช่น A1 สอดคล้องกับ (0,0) A2 สอดคล้องกับ (0,1) และ D3 สอดคล้องกับ (3,2) พิกัดใน Excel เริ่มต้นที่ A,1 แต่ใน jxl พิกัดทั้งหมดเริ่มต้นจาก 0
คุณยังสามารถรับจำนวนแถวและคอลัมน์ผ่านเมธอด getRows() และ getColumns() ของชีต และใช้สำหรับการควบคุมลูปเพื่อส่งออกเนื้อหาทั้งหมดในชีต
เขียน:
ในการเขียนเนื้อหาลงใน Excel คุณใช้คลาสในแพ็คเกจ jxl.write เป็นหลัก
แนวคิดคือ:
OutputStream<-WritableWorkbook<-WritableSheet<-Label
ป้ายกำกับที่นี่แสดงถึงตำแหน่งและเนื้อหาของเซลล์ที่เขียนลงในชีต
รหัสจาวา
OutputStream os=new FileOutputStream("c:\test.xls");//ส่งออก URL ไฟล์ Excel
WritableWorkbook wwb = Workbook.createWorkbook(os);//สร้างสมุดงานที่เขียนได้
WritableSheet ws = wwb.createSheet("sheet1", 0);//สร้างแผ่นงานแบบเขียนได้
Label labelCF=new Label(0, 0, "hello");//สร้างสถานที่เขียนและเนื้อหา
ws.addCell(labelCF);//เขียนป้ายกำกับลงในชีต
ตัวสร้างป้ายกำกับ Label(int x, int y, String aString) xy หมายถึง xy เมื่ออ่าน และ aString เป็นเนื้อหาที่เขียน
WritableFont wf = new WritableFont(WritableFont.TIMES, 12, WritableFont.BOLD, false);//ตั้งค่าแบบอักษรสำหรับเขียน
WritableCellFormat wcfF = WritableCellFormat ใหม่ (wf); // ตั้งค่า CellFormat
Label labelCF=new Label(0, 0, "hello");//สร้างตำแหน่งการเขียน เนื้อหา และรูปแบบ
ตัวสร้างอื่นของ Label, Label(int c, int r, String cont, CellFormat st) สามารถจัดรูปแบบเนื้อหาที่เขียน ตั้งค่าแบบอักษร และคุณลักษณะอื่นๆ
คุณสามารถเขียนตอนนี้
www.write();
ปิดหลังจากเขียน
www.ปิด();
ปิดกระแสเอาต์พุตด้วย
ระบบปฏิบัติการปิด;
ตกลง ตราบใดที่คุณรวมการอ่านและการเขียนเข้าด้วยกัน คุณสามารถอ่านข้อมูลใน N Excel และเขียนลงในตาราง Excel ใหม่ที่คุณต้องการได้ ซึ่งค่อนข้างสะดวก
ต่อไปนี้เป็นตัวอย่างของโปรแกรม:
รหัสจาวา
sql = "เลือก * จากชื่อตาราง";
อาร์เอส = stmt.executeQuery(sql);
//สร้างไฟล์ Excel ใหม่
สตริง filePath=request.getRealPath("aaa.xls");
ไฟล์ myFilePath=ไฟล์ใหม่ (filePath);
ถ้า(!myFilePath.exists())
myFilePath.createNewFile();
FileWriter resultFile=ตัวเขียนไฟล์ใหม่ (myFilePath);
PrintWriter myFile=new PrintWriter(resultFile);
resultFile.close();
//ใช้ JXL เพื่อเพิ่มเนื้อหาลงในไฟล์ที่สร้างขึ้นใหม่
OutputStream outf = FileOutputStream ใหม่ (filePath);
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(outf);
jxl.write.WritableSheet ws = wwb.createSheet("sheettest", 0);
อินท์ i=0;
อินท์เจ=0;
สำหรับ (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(ป้ายกำกับใหม่(k,0,rs.getMetaData().getColumnName(k+1)));
-
ในขณะที่(rs.ถัดไป()){
out.println(rs.getMetaData().getColumnCount());
สำหรับ (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(ป้ายกำกับใหม่(k,j+i+1,rs.getString(k+1)));
-
ฉัน++;
-
www.write();
www.ปิด();
} catch (ข้อยกเว้น e) {e.printStackTrace();}
ในที่สุด{
rs.ปิด();
conn.ปิด();
-
response.sendRedirect("aaa.xls");
บทความนี้มาจากบล็อก CSDN โปรดระบุแหล่งที่มาเมื่อพิมพ์ซ้ำ: http://blog.csdn.net/yangf1984/archive/2009/12/28/5088933.aspx