Recentemente vi na Internet um código aberto que usa java para controlar o excel, experimentei no weblogic e achei muito bom, gostaria de recomendar a todos.
Primeiro vá para http://www.andykhan.com/jexcelapi/index.html para baixar o JExcelApi mais recente e coloque jxl.jar em seu caminho de classe.
Escreva um javaBean e use JExcelApi para gerar documentos Excel dinamicamente. Vou escrever o mais simples e esquemático aqui. Se for complicado, pode ser necessário consultar o banco de dados ou algo assim.
///////////////////////////Test.java///////////////// ///// ////////////////////////
pacote com.jagie.test;
importar java.io.*;
importar jxl.*;
importar jxl.write.*;
importar jxl.format.*;
importar java.util.*;
importar java.awt.Color;
teste de classe pública{
public static void writeExcel (OutputStream os) lança exceção {
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, "Eu amo a China");
ws.addCell(rótuloC);
jxl.write.WritableFont wfc = novo jxl.write.WritableFont(WritableFont.ARIAL,20, WritableFont.BOLD, falso,
UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.GREEN);
jxl.write.WritableCellFormat wcfFC = novo jxl.write.WritableCellFormat(wfc);
wcfFC.setBackground(jxl.format.Colour.RED);
labelC = new jxl.write.Label(6, 0, "China me ama",wcfFC);
ws.addCell(rótuloC);
//Escrever na planilha Exel wwb.write();
//Fecha o objeto pasta de trabalho do Excel wwb.close();
}
//É melhor escrever um método principal como este para testar se sua classe está bem escrita.
public static void main(String[] args)lança exceção{
Arquivo f=novo Arquivo("kk.xls");
f.createNewFile();
writeExcel(novo FileOutputStream(f));
}
}
Escreva um jsp para usar o teste Javabean para gerar documentos Excel.
///////////////////////////test_excel.jsp////////////////// //// //////
< %@page import="com.jagie.test.Test" %>
<%
resposta.reset();
resposta.setContentType("aplicativo/vnd.ms-excel");
Test.writeExcel(response.getOutputStream());
%>
Isso está feito. Você pode usar o IE para acessar test_excel.jsp para abrir o documento Excel gerado dinamicamente no IE. Nada de bobagens.
Algumas pessoas podem perguntar: response.reset(); Esta frase pode ser omitida? Minha sugestão é que ela seja escrita, a menos que você possa garantir que não há mais nada no buffer de resposta.
Outros podem perguntar: eu adiciono < %@page contentType="application/vnd.ms-excel;charset=GBK" %> ao início do jsp e removo response.setContentType("application/vnd.ms-excel" ); está tudo bem? A resposta a esta pergunta é muito simples, basta verificar o código java gerado pelo servidor jsp após compilar o jsp. Se for alterado para isso, o código esquemático do arquivo java gerado pelo meu welogic7 após compilar test_excel.jsp é. da seguinte forma:
public void _jspService (solicitação javax.servlet.http.HttpServletRequest,
resposta javax.servlet.http.HttpServletResponse) lança java.io.IOException,
javax.servlet.ServletException {
//declara e define variáveis conhecidas:
javax.servlet.ServletConfig config = getServletConfig();
aplicação javax.servlet.ServletContext = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
//variáveis para protocolo de extensão de tags
Object page = this;
javax.servlet.jsp.JspWriter fora;
javax.servlet.jsp.PageContext pageContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(isto,
solicitação, resposta, nulo, verdadeiro, 8192, verdadeiro);
response.setHeader("Tipo de conteúdo", "application/vnd.ms-excel; charset=GBK");
out = pageContext.getOut();
JspWriter _originalOut = out
(
true);
resposta.setContentType("application/vnd.ms-excel;charset=GBK");
out.print("rnrnrnrn");
out.print("rn");
//[ /test_excel.jsp; Linha: 6]
resposta.reset(); //[ /test_excel.jsp;
//response.setContentType("aplicativo/vnd.ms-excel");
//[ /test_excel.jsp; Linha: 8]
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp;
} catch (lançavel __ee) {
while (out! = null && out! = _originalOut) out = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
}
//antes da chave de fechamento final...
}
Obviamente, após bloquear response.setContentType("application/vnd.ms-excel");, antes de Test.writeExcel(response.getOutputStream()); e depois de response.reset();, o tipo correto de contenttype de resposta é not set , é claro que a saída está distorcida. O código-fonte compilado do jsp que gera corretamente o Excel é o seguinte:
public void _jspService(javax.servlet.http.HttpServletRequest request,
resposta javax.servlet.http.HttpServletResponse) lança java.io.IOException,
javax.servlet.ServletException
{
//declara e define variáveis conhecidas:
javax.servlet.ServletConfig config = getServletConfig();
aplicação javax.servlet.ServletContext = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
//variáveis para protocolo de extensão de tags
Object page = this;
javax.servlet.jsp.JspWriter fora;
javax.servlet.jsp.PageContext pageContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(isto, solicitação, resposta, nulo, verdadeiro, 8192, verdadeiro
= pageContext.getOut());
JspWriter _originalOut = out
(
true);
out.print("rn");
//[ /test_excel.jsp;Linha: 2]
resposta.reset(); //[ /test_excel.jsp;
resposta.setContentType("aplicativo/vnd.ms-excel"); //[ /test_excel.jsp;
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp;
} catch (lançavel __ee) {
while (out! = null && out! = _originalOut) out = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
}
//antes da chave de fechamento final...
}
Você pode ver que depois de response.reset(); e antes de Test.writeExcel(response.getOutputStream()); o conteúdo da saída da resposta está definido corretamente. Portanto, a saída é normal.
Por fim, espero que este artigo possa inspirar você. Se houver algum erro, critique-o e corrija-o!