Galera,
tenho que passar um arquivo Excel para uma página.
Para a cração do arquivo, estou usando a API “Java Excel API”(jxl.jar). Criar o arquivo até que é tranquilo, mas não stou conseguindo recupra-lo na página…
O fluxo é o seguinte: A página chama o Action que por sua vez chama um servlet que trata a exibição do xls.
Quando a página é submetida, o Browser pergunta para confirmar o download ou abrir o documento… Após, o excel abre mas informa que não é possivel abrir o arquivo!
Ai vai a Servlet reponsável por isso:
/*
Created on Mar 9, 2005
TODO To change the template for this generated file go to
Window - Preferences - Java - Code Style - Code Templates
*/
package br.com.sle.sca.relat;
import java.io .;
import java.awt. ;
import java.util.ArrayList;
import javax.servlet.http.*;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import java.io.File;
import java.util.Date;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import br.com.sle.sca.model.Relatorio;
/**
@author brunotarcha
TODO To change the template for this generated type comment go to
Window - Preferences - Java - Code Style - Code Templates
*/
public class RelatorioExcelServlet extends HttpServlet {
private static final int FRAGMENT_SIZE = 50;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
try {
ArrayList relatorios = (ArrayList)request.getAttribute("relatorios");
ByteArrayOutputStream baos = writeReportAsExcel(relatorios, 600, 350);
//HTTP Headers
response.setHeader("Cache-Control", "max-age=30");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition","inline; filename=relatorio_" + System.currentTimeMillis() + ".xls");
response.setContentLength(baos.size());
//Enviar o documento XLS
ServletOutputStream sos = response.getOutputStream();
baos.writeTo(sos);
sos.flush();
sos.close();
} catch (Exception e)
{
response.getOutputStream().println("<BR><B>Ocorreu um erro ao exibir o relatório. Favor contate o administrador do sistema</B>");
}
}
private ByteArrayOutputStream writeReportAsExcel(ArrayList relatorios, int width, int height)
throws IOException, RowsExceededException, WriteException
{
ByteArrayOutputStream baosExcel = new ByteArrayOutputStream();
// Cria o arquivo
WritableWorkbook workbook = Workbook.createWorkbook(new File("relatorio_"+ System.currentTimeMillis() + ".xls"));
// Cria a camada de acesso
WritableSheet sheet = workbook.createSheet("First Sheet", 0);
//Insere o valor em A3 da tabela(0,2) -> 0==Coluna / 2==linha
Label label1 = new Label(0, 0, "Colaborador");
Label label2 = new Label(0, 1, "Categoria");
Label label3 = new Label(0, 2, "tarefa");
Label label4 = new Label(0, 3, "Projeto");
Label label5 = new Label(0, 4, "Horas");
sheet.addCell(label1);
sheet.addCell(label2);
sheet.addCell(label3);
sheet.addCell(label4);
sheet.addCell(label5);
//Escreve o arquivo
workbook.write();
//Fecha o arquvo
workbook.close();
return baosExcel;
}
}
Alguém me ajude!
bebad
Maio 14, 2007, 11:24pm
#2
Bro, eu realmente não sei como poderia te ajudar em seu codigo,
MAS eu sei dee um framework chamado displayTag que pode te ajudar muito na sua tarefa.
Att,
Ref:
http://displaytag.homeip.net/displaytag-examples-1.1/example-new-export.jsp