เมื่อเร็วๆ นี้ ฉันเห็นโอเพ่นซอร์สบนอินเทอร์เน็ตที่ใช้ Java เพื่อควบคุม Excel ฉันลองใช้มันบนเว็บลอจิกแล้วพบว่ามันดีมาก ฉันอยากจะแนะนำให้ทุกคน
ก่อนอื่น ให้ไปที่ http://www.andykhan.com/jexcelapi/index.html เพื่อดาวน์โหลด JExcelApi ล่าสุด และใส่ jxl.jar ใน classpath ของคุณ
เขียน javaBean และใช้ JExcelApi เพื่อสร้างเอกสาร Excel แบบไดนามิก ฉันจะเขียนเอกสารที่ง่ายที่สุดและเป็นแผนผังที่นี่ ถ้ามันซับซ้อนคุณอาจต้องสืบค้นฐานข้อมูลหรืออะไรสักอย่าง
//////////////////////////////Test.java///////////////////// //////////////////////////////
แพ็คเกจ com.jagie.test;
นำเข้า java.io.*;
นำเข้า jxl.*;
นำเข้า jxl.write.*;
นำเข้า jxl.format.*;
นำเข้า java.util.*;
นำเข้า java.awt.Color
การทดสอบคลาสสาธารณะ {
โมฆะสาธารณะคง writeExcel (OutputStream os) พ่นข้อยกเว้น {
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(ระบบปฏิบัติการ);
jxl.write.WritableSheet ws = wwb.createSheet("TestSheet1", 0);
jxl.write.Label labelC = ใหม่ jxl.write.Label(0, 0, "ฉันรักประเทศจีน");
ws.addCell(labelC);
jxl.write.WritableFont wfc = ใหม่ jxl.write.WritableFont(WritableFont.ARIAL,20, WritableFont.BOLD, เท็จ,
ขีดเส้นใต้Style.NO_UNDERLINE, jxl.format.Colour.GREEN);
jxl.write.WritableCellFormat wcfFC = ใหม่ jxl.write.WritableCellFormat(wfc);
wcfFC.setBackground(jxl.format.Colour.RED);
labelC = new jxl.write.Label(6, 0, "จีนรักฉัน",wcfFC);
ws.addCell(labelC);
//เขียนไปยังแผ่นงาน Exel wwb.write();
//ปิดวัตถุสมุดงาน Excel wwb.close();
}
//วิธีที่ดีที่สุดคือเขียนวิธีการหลักเช่นนี้เพื่อทดสอบว่าชั้นเรียนของคุณเขียนได้ดีหรือไม่
โมฆะคงที่สาธารณะ main (String [] args) พ่นข้อยกเว้น {
ไฟล์ f=ไฟล์ใหม่("kk.xls");
f.createNewFile();
writeExcel (FileOutputStream ใหม่ (f));
-
}
เขียน jsp เพื่อใช้การทดสอบ Javabean เพื่อส่งออกเอกสาร Excel
//////////////////////////////test_excel.jsp///////////////////// ///// //////
< %@page import="com.jagie.test.Test" %>
-
การตอบสนองรีเซ็ต();
response.setContentType("application/vnd.ms-excel");
Test.writeExcel(response.getOutputStream());
%>
เสร็จสิ้น คุณสามารถใช้ IE เพื่อเข้าถึง test_excel.jsp เพื่อเปิดเอกสาร Excel ที่สร้างขึ้นแบบไดนามิกใน IE ไม่มีการพูดพล่อยๆเลย
บางคนอาจถามว่า: response.reset(); สามารถละเว้นประโยคนี้ได้หรือไม่ คำแนะนำของฉันคือต้องเขียน เว้นแต่คุณจะรับประกันได้ว่าไม่มีอะไรอื่นในบัฟเฟอร์การตอบกลับ
คนอื่นอาจถาม: ฉันเพิ่ม < %@page contentType="application/vnd.ms-excel;charset=GBK" %> ที่จุดเริ่มต้นของ jsp และลบ response.setContentType("application/vnd.ms-excel" ); Is โอเคไหม คำตอบสำหรับคำถามนี้ง่ายมาก เพียงตรวจสอบโค้ด java ที่สร้างโดยเซิร์ฟเวอร์ jsp หลังจากคอมไพล์ jsp หากมีการเปลี่ยนแปลงโค้ดนี้ โค้ดแผนผังของไฟล์ java ที่สร้างโดย welogic7 หลังจากการคอมไพล์ test_excel.jsp คือ ดังต่อไปนี้:
โมฆะสาธารณะ _jspService (javax.servlet.http.HttpServletRequest คำขอ
javax.servlet.http.HttpServletResponse การตอบสนอง) พ่น java.io.IOException
javax.servlet.ServletException {
// ประกาศและตั้งค่าตัวแปรที่รู้จัก:
javax.servlet.ServletConfig config = getServletConfig();
javax.servlet.ServletContext application = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
// ตัวแปรสำหรับ
วัตถุโปรโตคอลส่วนขยายแท็ก หน้า = นี้;
javax.servlet.jsp.JspWriter ออก;
javax.servlet.jsp.PageContext pageContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(สิ่งนี้
คำขอ, การตอบสนอง, null, จริง, 8192, จริง);
response.setHeader ("ประเภทเนื้อหา", "application/vnd.ms-excel; charset=GBK");
ออก = pageContext.getOut();
JspWriter _OriginalOut = out;
javax.servlet.http.HttpSession session = request.getSession(true);
ลอง { // หน้าข้อผิดพลาดลองบล็อก
response.setContentType("application/vnd.ms-excel;charset=GBK");
out.print("rnrnrnrn");
out.print("rn");
//[ /test_excel.jsp บรรทัด: 6]
response.reset(); //[ /test_excel.jsp;
//response.setContentType("application/vnd.ms-excel");
//[ /test_excel.jsp; บรรทัด: 8]
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp;
} จับ (โยนได้ __ee) {
ในขณะที่ (ออก != null && ออก != _OriginalOut) ออก = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((โยนได้)__ee);
}
// ก่อนวงเล็บปีกกาปิดสุดท้าย...
}
แน่นอน หลังจากบล็อก response.setContentType("application/vnd.ms-excel"); ก่อน Test.writeExcel(response.getOutputStream()); และหลัง response.reset(); ประเภทเนื้อหาการตอบสนองที่ถูกต้องคือ not set แน่นอนว่าเอาต์พุตจะอ่านไม่ออก ซอร์สโค้ดที่คอมไพล์ของ jsp ที่ส่งออก excel อย่างถูกต้องมีดังนี้:
public void _jspService(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse การตอบสนอง) พ่น java.io.IOException
javax.servlet.ServletException
-
// ประกาศและตั้งค่าตัวแปรที่รู้จักกันดี:
javax.servlet.ServletConfig config = getServletConfig();
javax.servlet.ServletContext application = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
// ตัวแปรสำหรับ
วัตถุโปรโตคอลส่วนขยายแท็ก หน้า = นี้;
javax.servlet.jsp.JspWriter ออก;
javax.servlet.jsp.PageContext pageContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(นี่, คำขอ, ตอบกลับ, null, จริง, 8192, จริง);
out = pageContext.getOut();
JspWriter _OriginalOut = out;
javax.servlet.http.HttpSession session = request.getSession(true);
ลอง { // หน้าข้อผิดพลาดลองบล็อก
out.print("rn");
//[ /test_excel.jsp; บรรทัด: 2]
response.reset(); //[ /test_excel.jsp;
response.setContentType("application/vnd.ms-excel"); //[ /test_excel.jsp;
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp;
} จับ (โยนได้ __ee) {
ในขณะที่ (ออก != null && ออก != _OriginalOut) ออก = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((โยนได้)__ee);
}
// ก่อนวงเล็บปีกกาปิดสุดท้าย...
}
คุณจะเห็นว่าหลังจาก response.reset(); และก่อน Test.writeExcel(response.getOutputStream()); เนื้อหาเอาต์พุตการตอบสนองได้รับการตั้งค่าอย่างถูกต้อง ดังนั้นเอาท์พุตจึงเป็นเรื่องปกติ
สุดท้ายนี้ฉันหวังว่าบทความนี้จะเป็นแรงบันดาลใจให้กับคุณได้ หากมีข้อผิดพลาดประการใด โปรดวิจารณ์และแก้ไขให้ถูกต้อง!