Pessoal boa tarde,
Estou gerando um relatório em xls, até aqui beleza.
O problema que estou gerando na pasta temp, eu preciso enviar para a sessão do navegador e o usuário escolher onde ele vai salvar.
Esse é meu método.
public void gerarExcel() {
String msnErro = validarFiltros();
Date dataInicio = usuarioLogado.getEmpresa().calcularInicioPeriodo(mesSelecionado, anoSelecionado);
Date dataFinal = usuarioLogado.getEmpresa().calcularFinalPeriodo(mesSelecionado, anoSelecionado);
if (msnErro != null) {
addMensagem(FacesMessage.SEVERITY_ERROR, "Extrato Bonco de Horas: ", msnErro);
return;
}
@SuppressWarnings(“resource”)
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet(“ExtratoBancoHora”);
CellStyle cellStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
// Definindo alguns padroes de layout
sheet.setDefaultColumnWidth(15);
sheet.setDefaultRowHeight((short) 400);
int rownum = 0;
int cellnum = 0;
Cell cell;
Row row;
// Configurando Header
row = sheet.createRow(rownum++);
cell = row.createCell(cellnum++);
cell.setCellValue(“Data”);
cell = row.createCell(cellnum++);
cell.setCellValue(“Crachá”);
cell = row.createCell(cellnum++);
cell.setCellValue(“Nome”);
cell = row.createCell(cellnum++);
cell.setCellValue(“Departamento”);
cell = row.createCell(cellnum++);
cell.setCellValue(“Histórico de Lançamentos”);
cell = row.createCell(cellnum++);
cell.setCellValue(“Débido”);
cell = row.createCell(cellnum++);
cell.setCellValue(“credito”);
cell = row.createCell(cellnum++);
cell.setCellValue(“Saldo”);
try {
List idsFuncionarios = new ArrayList();
for (Funcionario funcionario : funcionariosSelecionados) {
idsFuncionarios.add(funcionario.getId());
}
List funcionarios = funcionarioServico.obterFuncionariosExtratoBancoHoras(idsFuncionarios,
dataInicio, dataFinal, ativo);
for (Funcionario funcio : funcionarios) {
ExtratoBancoHorasVO extrato = new ExtratoBancoHorasVO();
extrato.setNomeFuncionario(funcio.getNome());
extrato.setCracha(funcio.getCrachaFormatado());
extrato.setDepartamento(funcio.getCentroCusto().getNome());
extrato.setRegistro(funcio.getRegistro());
Set<PontoDia> pontosDia = funcio.getPontos();
Float totalHoras = 0f;
for (PontoDia ponto : pontosDia) {
if (ponto.getCreditoBancoHora() == null && ponto.getDebitoBancoHora() == null) {
continue;
}
String descricaoEvento = ponto.formatarDescricaoEventosExtratoBH("/");
Float credito = ponto.getCreditoBancoHora();
Float debito = ponto.getDebitoBancoHora();
Float saldo = credito - debito;
if (saldo == 0) {
continue;
}
String strCredito = formatarParaHora(credito);
String strDebito = formatarParaHora(debito);
totalHoras += (saldo == null ? 0f : saldo);
String StrSaldoTotal = formatarParaHora(totalHoras);
row = sheet.createRow(rownum++);
cellnum = 0;
// Data
cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("m/d/yy"));
cell = row.createCell(cellnum++);
cell.setCellValue(ponto.getDia());
cell.setCellStyle(cellStyle);
// Crachá
cell = row.createCell(cellnum++);
cell.setCellValue(funcio.getCrachaFormatado());
// Nome
cell = row.createCell(cellnum++);
cell.setCellValue(funcio.getNome());
// Departamento
cell = row.createCell(cellnum++);
cell.setCellValue(funcio.getCentroCusto().getNome());
// Histórico de Lançamentos
cell = row.createCell(cellnum++);
cell.setCellValue(descricaoEvento);
// Débito
cell = row.createCell(cellnum++);
cell.setCellValue(strDebito);
// Crédito
cell = row.createCell(cellnum++);
cell.setCellValue(strCredito);
// Total mês
cell = row.createCell(cellnum++);
cell.setCellValue(StrSaldoTotal);
}
}
FileOutputStream out = new FileOutputStream(new File("C:\\temp\\extratoBanco.xls"));
workbook.write(out);
out.close();
} catch (Exception e) {
logg.error("Erro ao processar os dados", e);
addMensagem(FacesMessage.SEVERITY_ERROR, "Extrato Bonco de Horas: ", "Erro ao processar os dados.");
}
}
