Baru-baru ini, saya melihat sebuah open source di Internet yang menggunakan java untuk mengontrol excel. Saya mencobanya di weblogic dan ternyata sangat bagus. Saya ingin merekomendasikannya kepada semua orang.
Pertama buka http://www.andykhan.com/jexcelapi/index.html untuk mendownload JExcelApi terbaru dan masukkan jxl.jar di classpath Anda.
Tulis javaBean dan gunakan JExcelApi untuk menghasilkan dokumen excel secara dinamis. Saya akan menulis yang paling sederhana dan skematis di sini. Jika rumit, Anda mungkin perlu menanyakan database atau semacamnya.
////////////////////////////////Test.java////////////////// ///// //////////////////////////
paket com.jagie.test;
import java.io.*;
impor jxl.*;
import jxl.write.*;
import jxl.format.*;
import java.util.*;
impor java.awt.Color;
Tes kelas publik{
public static void writeExcel(OutputStream os) memunculkan Pengecualian {
jxl.write.WritableWorkbook wwb = Buku Kerja.createWorkbook(os);
jxl.write.WritableSheet ws = wwb.createSheet("TestSheet1", 0);
jxl.write.Label labelC = new jxl.write.Label(0, 0, "Saya suka Cina");
ws.addCell(labelC);
jxl.write.WritableFont wfc = baru jxl.write.WritableFont(WritableFont.ARIAL,20, WritableFont.BOLD, false,
UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.GREEN);
jxl.write.WritableCellFormat wcfFC = baru jxl.write.WritableCellFormat(wfc);
wcfFC.setBackground(jxl.format.Warna.MERAH);
labelC = new jxl.write.Label(6, 0, "China mencintaiku",wcfFC);
ws.addCell(labelC);
//Tulis ke lembar kerja Exel wwb.write();
//Menutup objek buku kerja Excel wwb.close();
}
//Yang terbaik adalah menulis metode utama seperti ini untuk menguji apakah kelas Anda ditulis dengan baik.
public static void main(String[] args)melemparkan Pengecualian{
Berkas f=Berkas baru("kk.xls");
f.createNewFile();
writeExcel(FileOutputStream baru(f));
}
}
Tulis jsp untuk menggunakan Javabean Test untuk menghasilkan dokumen excel.
///////////////////////////////test_excel.jsp/////////////////// //// //////
< %@page import="com.jagie.test.Test" %>
<%
respon.reset();
respon.setContentType("application/vnd.ms-excel");
Tes.writeExcel(response.getOutputStream());
%>
Ini selesai. Anda dapat menggunakan IE untuk mengakses test_excel.jsp untuk membuka dokumen excel yang dihasilkan secara dinamis di IE. Tidak ada omong kosong sama sekali.
Beberapa orang mungkin bertanya: respon.reset(); Bisakah kalimat ini dihilangkan? Saran saya adalah harus ditulis kecuali Anda dapat menjamin bahwa tidak ada yang lain di buffer respon.
Orang lain mungkin bertanya: Saya menambahkan < %@page contentType="application/vnd.ms-excel;charset=GBK" %> ke awal jsp dan menghapus respon.setContentType("application/vnd.ms-excel" ); tidak apa-apa? Jawaban dari pertanyaan ini sangat sederhana, cukup periksa kode java yang dihasilkan oleh server jsp setelah kompilasi jsp. Jika diubah menjadi ini, kode skema file java yang dihasilkan oleh welogic7 saya setelah kompilasi test_excel.jsp adalah sebagai berikut:
public void _jspService(permintaan javax.servlet.http.HttpServletRequest,
javax.servlet.http.HttpServletResponse respon) menampilkan java.io.IOException,
javax.servlet.ServletException {
// mendeklarasikan dan menyetel variabel terkenal:
javax.servlet.ServletConfig config = getServletConfig();
aplikasi javax.servlet.ServletContext = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
// variabel untuk protokol ekstensi Tag
Halaman objek = ini;
javax.servlet.jsp.JspWriter keluar;
javax.servlet.jsp.PageContext halamanContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(ini,
permintaan, tanggapan, null, benar, 8192, benar);
respon.setHeader("Jenis Konten", "application/vnd.ms-excel; charset=GBK");
keluar = pageContext.getOut();
JspWriter _originalOut = keluar;
(
true);
respon.setContentType("application/vnd.ms-excel;charset=GBK");
keluar.print("rnrnrnrn");
keluar.print("rn");
//[ /test_excel.jsp; Baris: 6]
respon.reset(); //[ /test_excel.jsp;
//response.setContentType("application/vnd.ms-excel");
//[ /test_excel.jsp; Baris: 8]
Tes.writeExcel(response.getOutputStream()); //[ /test_excel.jsp;
} catch (Dapat dilempar __ee) {
while (keluar != null && keluar != _originalOut) keluar = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Dapat Dilempar)__ee);
}
//sebelum kurung kurawal penutup terakhir...
}
Jelasnya, setelah memblokir respon.setContentType("application/vnd.ms-excel");, sebelum Test.writeExcel(response.getOutputStream());, dan setelah respon.reset();, jenis tipe konten respons yang benar adalah tidak disetel, tentu saja hasilnya kacau. Kode sumber jsp yang dikompilasi yang menghasilkan excel dengan benar adalah sebagai berikut:
public void _jspService(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse respon) menampilkan java.io.IOException,
javax.servlet.ServletException
{
// mendeklarasikan dan menyetel variabel terkenal:
javax.servlet.ServletConfig config = getServletConfig();
aplikasi javax.servlet.ServletContext = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
// variabel untuk protokol ekstensi Tag
Halaman objek = ini;
javax.servlet.jsp.JspWriter keluar;
javax.servlet.jsp.PageContext halamanContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(ini, permintaan, respons, null, true, 8192, true
out = pageContext.getOut();
JspWriter _originalOut = keluar;
(
true);
keluar.print("rn");
//[ /test_excel.jsp; Baris: 2]
respon.reset(); //[ /test_excel.jsp;
respon.setContentType("application/vnd.ms-excel"); //[ /test_excel.jsp;
Tes.writeExcel(response.getOutputStream()); //[ /test_excel.jsp;
} catch (Dapat dilempar __ee) {
while (keluar != null && keluar != _originalOut) keluar = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Dapat Dilempar)__ee);
}
//sebelum kurung kurawal penutup terakhir...
}
Anda dapat melihat bahwa setelah respon.reset(); dan sebelum Test.writeExcel(response.getOutputStream()); konten keluaran respons disetel dengan benar. Jadi outputnya normal.
Akhir kata, semoga artikel ini dapat menginspirasi Anda. Jika ada kesalahan, mohon dikritik dan diperbaiki!