Recientemente, vi un código abierto en Internet que usa Java para controlar Excel. Lo probé en weblogic y lo encontré muy bueno. Me gustaría recomendarlo a todos.
Primero vaya a http://www.andykhan.com/jexcelapi/index.html para descargar la última versión de JExcelApi y coloque jxl.jar en su classpath.
Escriba un javaBean y use JExcelApi para generar dinámicamente documentos de Excel. Escribiré el más simple y esquemático aquí. Si es complicado, es posible que necesites consultar la base de datos o algo así.
//////////////////////////////Test.java///////////////// ///// /////////////////////////
paquete com.jagie.test;
importar java.io.*;
importar jxl.*;
importar jxl.write.*;
importar formato jxl.*;
importar java.util.*;
importar java.awt.Color
prueba de clase pública {
writeExcel público estático vacío (OutputStream os) lanza una excepción {
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, "Amo China");
ws.addCell(etiquetaC);
jxl.write.WritableFont wfc = nuevo jxl.write.WritableFont(WritableFont.ARIAL,20, WritableFont.BOLD, falso,
UnderlineStyle.NO_UNDERLINE, jxl.format.Color.GREEN);
jxl.write.WritableCellFormat wcfFC = nuevo jxl.write.WritableCellFormat(wfc);
wcfFC.setBackground(jxl.format.Color.RED);
labelC = new jxl.write.Label(6, 0, "China me ama",wcfFC);
ws.addCell(etiquetaC);
//Escribir en la hoja de trabajo de Exel wwb.write();
//Cerrar el objeto del libro de Excel wwb.close();
}
//Es mejor escribir un método principal como este para probar si su clase está bien escrita.
public static void main (String [] args) lanza una excepción {
Archivo f=nuevo archivo("kk.xls");
f.createNewFile();
writeExcel(nuevo FileOutputStream(f));
}
}
Escriba un jsp para utilizar la prueba Javabean para generar documentos de Excel.
/////////////////////////////test_excel.jsp////////////////// //// //////
< %@page import="com.jagie.test.Test" %>
<%
respuesta.reset();
respuesta.setContentType("aplicación/vnd.ms-excel");
Test.writeExcel(response.getOutputStream());
%>
Esto está hecho. Puede usar IE para acceder a test_excel.jsp para abrir el documento de Excel generado dinámicamente en IE. Nada de galimatías.
Algunas personas pueden preguntar: respuesta.reset(); ¿Se puede omitir esta oración? Mi sugerencia es que se debe escribir a menos que pueda garantizar que no haya nada más en el búfer de respuesta.
Otros pueden preguntar: agrego < %@page contentType="application/vnd.ms-excel;charset=GBK" %> al principio de jsp y elimino Response.setContentType("application/vnd.ms-excel" ); ¿Está bien? La respuesta a esta pregunta es muy simple, simplemente verifique el código java generado por el servidor jsp después de compilar jsp. Si se cambia a esto, el código esquemático del archivo java generado por mi welogic7 después de compilar test_excel.jsp es. de la siguiente manera:
public void _jspService (solicitud javax.servlet.http.HttpServletRequest,
respuesta javax.servlet.http.HttpServletResponse) arroja java.io.IOException,
javax.servlet.ServletException {
// declarar y establecer variables conocidas:
javax.servlet.ServletConfig configuración = getServletConfig();
aplicación javax.servlet.ServletContext = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = nulo;
// variables para el protocolo de extensión de etiqueta
Página de objeto = this;
javax.servlet.jsp.JspWriter fuera;
javax.servlet.jsp.PageContext pageContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(esto,
solicitud, respuesta, nulo, verdadero, 8192, verdadero);
respuesta.setHeader("Tipo de contenido", "aplicación/vnd.ms-excel; charset=GBK");
fuera = pageContext.getOut();
JspWriter _originalOut = out;
javax.servlet.http.HttpSession session = request.getSession(true);
// bloque de prueba de página de error;
respuesta.setContentType("aplicación/vnd.ms-excel;charset=GBK");
out.print("rnrnrnrn");
salida.print("rn");
//[ /test_excel.jsp; Línea: 6]
respuesta.reset(); //[ /test_excel.jsp; Línea: 7]
//response.setContentType("aplicación/vnd.ms-excel");
//[ /test_excel.jsp; Línea: 8]
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp; Línea: 9]
} captura (tirable __ee) {
mientras (¡fuera! = nulo && fuera! = _originalOut) fuera = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
}
//antes de la llave de cierre final...
}
Obviamente, después de bloquear Response.setContentType("application/vnd.ms-excel");, antes de Test.writeExcel(response.getOutputStream()); y después de Response.reset();, el tipo correcto de tipo de contenido de respuesta es no configurado, por supuesto, la salida es confusa. El código fuente compilado de jsp que genera Excel correctamente es el siguiente:
public void _jspService (solicitud javax.servlet.http.HttpServletRequest,
respuesta javax.servlet.http.HttpServletResponse) arroja java.io.IOException,
javax.servlet.ServletException
{
// declarar y establecer variables conocidas:
javax.servlet.ServletConfig configuración = getServletConfig();
aplicación javax.servlet.ServletContext = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = nulo;
// variables para el protocolo de extensión de etiqueta
Página de objeto = this;
javax.servlet.jsp.JspWriter fuera;
javax.servlet.jsp.PageContext pageContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(esto, solicitud, respuesta, nulo, verdadero, 8192,
salida = pageContext.getOut());
JspWriter _originalOut = out;
javax.servlet.http.HttpSession session = request.getSession(true);
// bloque de prueba de página de error;
salida.print("rn");
//[ /test_excel.jsp; Línea: 2]
respuesta.reset(); //[ /test_excel.jsp; Línea: 3]
respuesta.setContentType("aplicación/vnd.ms-excel"); //[ /test_excel.jsp;
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp; Línea: 5]
} captura (tirable __ee) {
mientras (¡fuera! = nulo && fuera! = _originalOut) fuera = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
}
//antes de la llave de cierre final...
}
Puede ver que después de Response.reset(); y antes de Test.writeExcel(response.getOutputStream()); el contenido de salida de la respuesta está configurado correctamente. Entonces la salida es normal.
Finalmente, espero que este artículo pueda inspirarte. Si hay algún error, ¡critícalo y corrígelo!