Kürzlich habe ich im Internet ein Open-Source-Programm gesehen, das Java zur Steuerung von Excel verwendet. Ich habe es auf Weblogic ausprobiert und fand es sehr gut. Ich möchte es jedem empfehlen.
Gehen Sie zunächst zu http://www.andykhan.com/jexcelapi/index.html, um die neueste JExcelApi herunterzuladen, und fügen Sie jxl.jar in Ihren Klassenpfad ein.
Schreiben Sie eine JavaBean und verwenden Sie JExcelApi, um Excel-Dokumente dynamisch zu generieren. Ich werde hier das einfachste und schematischste Dokument schreiben. Wenn es kompliziert ist, müssen Sie möglicherweise die Datenbank abfragen oder etwas Ähnliches.
/////////////////////////////Test.java///////////////// ///// /////////////////////////
Paket com.jagie.test;
java.io.* importieren;
jxl importieren.*;
import jxl.write.*;
import jxl.format.*;
import java.util.*;
import java.awt.Color;
öffentliche Klasse Test{
public static void writeExcel(OutputStream os) löst eine Ausnahme aus {
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os);
jxl.write.WritableSheet ws = wwb.createSheet("TestSheet1", 0);
jxl.write.Label labelC = new jxl.write.Label(0, 0, „I love China“);
ws.addCell(labelC);
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL,20, WritableFont.BOLD, false,
UnderlineStyle.NO_UNDERLINE, jxl.format.Color.GREEN);
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
wcfFC.setBackground(jxl.format.Color.RED);
labelC = new jxl.write.Label(6, 0, „China loves me“,wcfFC);
ws.addCell(labelC);
//In Exel-Arbeitsblatt schreiben wwb.write();
//Schließen Sie das Excel-Arbeitsmappenobjekt wwb.close();
}
//Es ist am besten, eine Hauptmethode wie diese zu schreiben, um zu testen, ob Ihre Klasse gut geschrieben ist.
public static void main(String[] args)wirft eine Ausnahme{
Datei f=neue Datei("kk.xls");
f.createNewFile();
writeExcel(new FileOutputStream(f));
}
}
Schreiben Sie eine JSP, um den Javabean-Test zur Ausgabe von Excel-Dokumenten zu verwenden.
///////////////////////////test_excel.jsp////////////////// //// //////
< %@page import="com.jagie.test.Test" %>
<%
Antwort.reset();
Response.setContentType("application/vnd.ms-excel");
Test.writeExcel(response.getOutputStream());
%>
Dies ist erledigt. Sie können über den IE auf test_excel.jsp zugreifen, um das dynamisch generierte Excel-Dokument im IE zu öffnen. Überhaupt kein Kauderwelsch.
Manche Leute fragen sich vielleicht: Response.reset(); Kann dieser Satz weggelassen werden, es sei denn, Sie können garantieren, dass sich nichts anderes im Antwortpuffer befindet?
Andere fragen sich vielleicht: Ich füge < %@page contentType="application/vnd.ms-excel;charset=GBK" %> am Anfang von jsp hinzu und entferne Response.setContentType("application/vnd.ms-excel" ); Ist es in Ordnung? Die Antwort auf diese Frage ist sehr einfach. Überprüfen Sie einfach den vom JSP-Server nach dem Kompilieren von JSP generierten Java-Code wie folgt:
public void _jspService(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse (Antwort) löst java.io.IOException aus,
javax.servlet.ServletException {
// Bekannte Variablen deklarieren und festlegen:
javax.servlet.ServletConfig config = getServletConfig();
javax.servlet.ServletContext application = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
// Variablen für das Tag-Erweiterungsprotokoll
Object page = this;
javax.servlet.jsp.JspWriter out;
javax.servlet.jsp.PageContext pageContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(this,
request, Response, null, true, 8192, true);
Response.setHeader("Content-Type", "application/vnd.ms-excel; charset=GBK");
out = pageContext.getOut();
JspWriter _originalOut = out;
javax.servlet.http.HttpSession session = request.getSession(true);
try { // error page try block
Response.setContentType("application/vnd.ms-excel;charset=GBK");
out.print("rnrnrnrn");
out.print("rn");
//[ /test_excel.jsp; Zeile: 6]
Response.reset(); //[ /test_excel.jsp; Zeile: 7]
//response.setContentType("application/vnd.ms-excel");
//[ /test_excel.jsp; Zeile: 8]
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp;
} Catch (Throwable __ee) {
while (out != null && out != _originalOut) out = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
}
//vor der letzten schließenden Klammer...
}
Offensichtlich ist nach dem Blockieren von Response.setContentType("application/vnd.ms-excel");, vor Test.writeExcel(response.getOutputStream()); und nach Response.reset(); der richtige Typ des Antwortinhaltstyps nicht gesetzt, ist die Ausgabe natürlich verstümmelt. Der kompilierte Quellcode von JSP, der Excel korrekt ausgibt, lautet wie folgt:
public void _jspService(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse (Antwort) löst java.io.IOException aus,
javax.servlet.ServletException
{
// Bekannte Variablen deklarieren und setzen:
javax.servlet.ServletConfig config = getServletConfig();
javax.servlet.ServletContext application = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
// Variablen für das Tag-Erweiterungsprotokoll
Object page = this;
javax.servlet.jsp.JspWriter out;
javax.servlet.jsp.PageContext pageContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(this, request, Response, null, true, 8192, true)
;
JspWriter _originalOut = out;
javax.servlet.http.HttpSession session = request.getSession(true);
try { // error page try block
out.print("rn");
//[ /test_excel.jsp; Zeile: 2]
Response.reset(); //[ /test_excel.jsp; Zeile: 3]
Response.setContentType("application/vnd.ms-excel"); //[ /test_excel.jsp;
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp;
} Catch (Throwable __ee) {
while (out != null && out != _originalOut) out = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
}
//vor der letzten schließenden Klammer...
}
Sie können sehen, dass nach Response.reset(); und vor Test.writeExcel(response.getOutputStream()); der Antwortausgabeinhalt korrekt eingestellt ist. Die Ausgabe ist also normal.
Abschließend hoffe ich, dass dieser Artikel Sie inspirieren kann. Wenn es Fehler gibt, kritisieren und korrigieren Sie diese bitte!