package br.com.relatorio.rn;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.Region;
import com.JCValueObject;
/**
*
* @author dferreirab
* @since 30-07-2015
*
*/
public abstract class RelatorioXLS<T extends JCValueObject> {
protected HSSFWorkbook wb;
private String sheetName;
private String nomeArquivo;
private String titulo;
private String subTitulo;
private T dadosRelatorioVO;
private Collection<T> collDadosRelatorioVO;
private HSSFSheet sheet;
public RelatorioXLS(T pdadosRelatorioVO) {
dadosRelatorioVO = pdadosRelatorioVO;
sheetName = "sheet1";
init();
}
public RelatorioXLS(T pdadosRelatorioVO, String pSheetName) {
dadosRelatorioVO = pdadosRelatorioVO;
sheetName = pSheetName;
init();
}
public RelatorioXLS(Collection<T> pCollDadosRelatorioVO) {
collDadosRelatorioVO = pCollDadosRelatorioVO;
sheetName = "sheet1";
init();
}
public RelatorioXLS(Collection<T> pCollDadosRelatorioVO, String pSheetName) {
collDadosRelatorioVO = pCollDadosRelatorioVO;
sheetName = pSheetName;
init();
}
@SuppressWarnings("deprecation")
private void init() {
wb = new HSSFWorkbook();
sheet = wb.createSheet();
wb.setSheetName(0, sheetName, HSSFWorkbook.ENCODING_COMPRESSED_UNICODE);
}
/**
* Título
*
* @param pNumLinha
* @param pColumDe
* @param pColumAte
* @param pTexto
*/
protected void inserirTitulo(int pNumLinha, int pColumDe, int pColumAte) {
addCelula(sheet.createRow((short) pNumLinha), pColumDe, pColumAte, getStyleTitulo(), getTitulo());
}
/**
* Sub título
*
* @param pNumLinha
* @param pColumDe
* @param pColumAte
* @param pTexto
*/
protected void inserirSubTitulo(int pNumLinha, int pColumDe, int pColumAte) {
addCelula(sheet.createRow((short) pNumLinha), pColumDe, pColumAte, getStyleSubTitulo(), getSubTitulo());
}
/**
* Dados do Relatório
*
* @param pNumLinha
* @param pDados
*/
protected abstract void inserirDados(int pNumLinha);
/**
* Estilo do título
*
* @return
*/
protected HSSFCellStyle getStyleTitulo() {
HSSFFont lFont = wb.createFont();
lFont.setFontHeightInPoints((short) 12);
lFont.setColor(HSSFColor.BLACK.index);
lFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
HSSFCellStyle lStyle = wb.createCellStyle();
lStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
lStyle.setFont(lFont);
return lStyle;
}
/**
* Estilo do sub título
*
* @return
*/
protected HSSFCellStyle getStyleSubTitulo() {
HSSFFont lFont = wb.createFont();
lFont.setFontHeightInPoints((short) 12);
lFont.setColor(HSSFColor.BLACK.index);
HSSFCellStyle lStyle = wb.createCellStyle();
lStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
lStyle.setFont(lFont);
return lStyle;
}
/**
* Estilo das células normais
*
* @return
*/
protected HSSFCellStyle getStyleDados() {
HSSFFont lFont = wb.createFont();
lFont.setFontHeightInPoints((short) 10);
lFont.setColor(HSSFColor.BLACK.index);
HSSFCellStyle lStyle = wb.createCellStyle();
lStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
lStyle.setBorderBottom((short) 2);
lStyle.setBorderLeft((short) 1);
lStyle.setBorderRight((short) 1);
lStyle.setBorderTop((short) 2);
lStyle.setFont(lFont);
return lStyle;
}
/**
* Estilo das células das colunas
*
* @return
*/
protected HSSFCellStyle getStyleColunas() {
HSSFFont lFont = wb.createFont();
lFont.setFontHeightInPoints((short) 10);
lFont.setColor(HSSFColor.BLACK.index);
lFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
HSSFCellStyle lStyle = wb.createCellStyle();
lStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
lStyle.setBorderBottom((short) 2);
lStyle.setBorderLeft((short) 1);
lStyle.setBorderRight((short) 1);
lStyle.setBorderTop((short) 2);
lStyle.setFont(lFont);
return lStyle;
}
/**
* Inserir Linha
*
* @param pNumLinha
* @return
*/
protected HSSFRow addLinha(int pNumLinha) {
return getSheet().createRow((short) pNumLinha);
}
/**
* Inserir Linha com os valores das colunas em uma Lista
*
* @param pNumLinha
* @param pPosicaoColunaInicio
* @param pStyle
* @param pListCelulas
* @return
*/
protected HSSFRow addLinha(int pNumLinha, int pPosicaoColunaInicio, List<Celula> pListCelulas) {
HSSFRow lLinha = addLinha(pNumLinha);
int lPosicaoColunaDe = pPosicaoColunaInicio;
int lPosicaoColunaAte = 0;
for (Celula lCelula : pListCelulas) {
lPosicaoColunaAte = (lCelula.getLarguraColuna() > 1) ? (lPosicaoColunaDe + (lCelula.getLarguraColuna() - 1)) : lPosicaoColunaDe;
addCelula(lLinha, lPosicaoColunaDe, lPosicaoColunaAte, lCelula.getStyle(), lCelula.getValor());
lPosicaoColunaDe = lPosicaoColunaAte + 1;
}
return lLinha;
}
/**
* Inserir célula
*
* @param pLinha
* @param pPosicaoDe
* @param pPosicaoAte
* @param pStyle
* @param pValor
*/
@SuppressWarnings("deprecation")
protected HSSFCell addCelula(HSSFRow pLinha, int pPosicaoDe, int pPosicaoAte, HSSFCellStyle pStyle, Object pValor) {
List<HSSFCell> listCelulas = new ArrayList<HSSFCell>(pPosicaoAte - pPosicaoDe);
/*
* Definindo o estilo das células
*/
for (int i = pPosicaoDe; i <= pPosicaoAte; i++) {
HSSFCell celula = pLinha.createCell((short) i);
celula = pLinha.createCell((short) i);
celula.setCellStyle(pStyle);
celula.setEncoding(HSSFCell.ENCODING_COMPRESSED_UNICODE);
listCelulas.add(celula);
}
Region region = new Region();
region.setRowFrom(pLinha.getRowNum());
region.setRowTo(pLinha.getRowNum());
region.setColumnFrom((short) pPosicaoDe);
region.setColumnTo((short) pPosicaoAte);
sheet.addMergedRegion(region);
if (pValor != null) {
if (pValor instanceof String)
listCelulas.get(0).setCellValue(pValor.toString());
else if (pValor instanceof Integer)
listCelulas.get(0).setCellValue((Integer) pValor);
else if (pValor instanceof Double)
listCelulas.get(0).setCellValue((Double) pValor);
else if (pValor instanceof Date)
listCelulas.get(0).setCellValue((Date) pValor);
else if (pValor instanceof Calendar)
listCelulas.get(0).setCellValue((Calendar) pValor);
} else {
listCelulas.get(0).setCellValue("");
}
return listCelulas.get(0);
}
/**
* Define o corpo do excel. <br>
* EX:<br>
* <br>
* // Insere o título na linha 0 da coluna 0 até 17<br>
* inserirTitulo(0, 0, 17); <br>
* <br>
*
* // Insere o subtítulo na linha 1 da coluna 0 até 17<br>
* inserirSubTitulo(1, 0, 17); <br>
* <br>
*
* // Insere os dados na linha 3 <br>
* inserirDados(3); <br>
* <br>
*
* @throws Exception
*/
protected abstract void processarXls() throws Exception;
/**
* Gera o arquivo XLS
*
* @throws IOException
* @throws Exception
*/
public void gerarXls() throws IOException, Exception {
processarXls();
HttpServletResponse lResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
lResponse.setContentType("application/xlsx");
lResponse.setHeader("Content-Disposition", "attachment; filename=\"" + nomeArquivo + ".xls\"");
ServletOutputStream lOutput = lResponse.getOutputStream();
wb.write(lOutput);
lOutput.flush();
lOutput.close();
FacesContext lFacesContext = FacesContext.getCurrentInstance();
lFacesContext.responseComplete();
}
public String getNomeArquivo() {
return nomeArquivo;
}
public void setNomeArquivo(String nomeArquivo) {
this.nomeArquivo = nomeArquivo;
}
protected HSSFWorkbook getWb() {
return wb;
}
protected void setWb(HSSFWorkbook wb) {
this.wb = wb;
}
protected HSSFSheet getSheet() {
return sheet;
}
protected void setSheet(HSSFSheet sheet) {
this.sheet = sheet;
}
protected T getDadosRelatorioVO() {
return dadosRelatorioVO;
}
protected void setDadosRelatorioVO(T dadosRelatorioVO) {
this.dadosRelatorioVO = dadosRelatorioVO;
}
protected Collection<T> getCollDadosRelatorioVO() {
return collDadosRelatorioVO;
}
protected void setCollDadosRelatorioVO(Collection<T> collDadosRelatorioVO) {
this.collDadosRelatorioVO = collDadosRelatorioVO;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getSubTitulo() {
return subTitulo;
}
public void setSubTitulo(String subTitulo) {
this.subTitulo = subTitulo;
}
/**
* Célula
*
* @author dferreirab
* @since 03-08-2015
*
*/
public class Celula {
private Object valor;
private int larguraColuna;
private HSSFCellStyle style;
public Celula(Object valor) {
super();
this.valor = valor;
}
public Celula(Object valor, int larguraColuna) {
super();
this.valor = valor;
this.larguraColuna = larguraColuna;
}
public Celula(Object valor, int larguraColuna, HSSFCellStyle style) {
super();
this.valor = valor;
this.larguraColuna = larguraColuna;
this.style = style;
}
protected Object getValor() {
return valor;
}
protected void setValor(Object valor) {
this.valor = valor;
}
protected int getLarguraColuna() {
return larguraColuna;
}
protected void setLarguraColuna(int larguraColuna) {
this.larguraColuna = larguraColuna;
}
protected HSSFCellStyle getStyle() {
return style;
}
protected void setStyle(HSSFCellStyle style) {
this.style = style;
}
}
}
Exemplo:
package br.com.relatorio.rn;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import br.com.vo.LojaVO;
public class RelatorioLojaXLS extends RelatorioXLS<LojaVO> {
public RelatorioLojaXLS(Collection<LojaVO> pDadosRelatorio) {
super(pDadosRelatorio, "RelLoja");
}
protected void processarXls() throws Exception {
inserirTitulo(0, 0, 17);
inserirDados(3);
}
/**
* Dados do Relatório
*
* @param pNumLinha
*/
protected void inserirDados(int pNumLinha) {
HSSFCellStyle lStyleDados = getStyleDados();
HSSFCellStyle lStyleColunas = getStyleColunas();
Collection<LojaVO> lCollDados = getCollDadosRelatorioVO();
int lnumColunaInicio = 0;
int lLarguraNomeDaLoja = 3;
int lLarguraRegional = 2;
int lLarguraTerritorio = 2;
int lLarguraEstadoDaLoja = 2;
int lLarguraArea = 1;
int lLarguraAtendimentoPremium = 3;
int lLarguraLojaConceito = 2;
int lLarguraAgendamentoNormal = 3;
int lLarguraAtiva = 1;
List<Celula> lListColunas = new ArrayList<Celula>();
lListColunas.add(new Celula("Nome da Loja", lLarguraNomeDaLoja, lStyleColunas));
lListColunas.add(new Celula("Regional", lLarguraRegional, lStyleColunas));
lListColunas.add(new Celula("Território", lLarguraTerritorio, lStyleColunas));
lListColunas.add(new Celula("Estado", lLarguraEstadoDaLoja, lStyleColunas));
lListColunas.add(new Celula("Área", lLarguraArea, lStyleColunas));
lListColunas.add(new Celula("Atendimento Premium", lLarguraAtendimentoPremium, lStyleColunas));
lListColunas.add(new Celula("Loja Conceito", lLarguraLojaConceito, lStyleColunas));
lListColunas.add(new Celula("Agendamento Normal", lLarguraAgendamentoNormal, lStyleColunas));
lListColunas.add(new Celula("Ativa", lLarguraAtiva, lStyleColunas));
addLinha(pNumLinha++, lnumColunaInicio, lListColunas);
List<Celula> lListDados = null;
for (LojaVO lLojaVO : lCollDados) {
lListDados = new ArrayList<Celula>();
lListDados.add(new Celula(lLojaVO.getNome(), lLarguraNomeDaLoja, lStyleDados));
lListDados.add(new Celula(lLojaVO.getArea().getTerritorioEstado().getTerritorio().getRegional().getNome(), lLarguraRegional, lStyleDados));
lListDados.add(new Celula(lLojaVO.getArea().getTerritorioEstado().getTerritorio().getNome(), lLarguraTerritorio, lStyleDados));
lListDados.add(new Celula(lLojaVO.getCidade().getEstado().getSigla(), lLarguraEstadoDaLoja, lStyleDados));
lListDados.add(new Celula(lLojaVO.getArea().getNome(), lLarguraArea, lStyleDados));
lListDados.add(new Celula(lLojaVO.getTipoPremium().equals("N") ? "Não" : "Sim", lLarguraAtendimentoPremium, lStyleDados));
lListDados.add(new Celula(lLojaVO.getLojaConceito().intValue() == 0 ? "Não" : "Sim", lLarguraLojaConceito, lStyleDados));
lListDados.add(new Celula(lLojaVO.getAgendamentoNormal().intValue() == 0 ? "Não" : "Sim", lLarguraAgendamentoNormal, lStyleDados));
lListDados.add(new Celula(lLojaVO.getAtiva().equals("N") ? "Não" : "Sim", lLarguraAtiva, lStyleDados));
addLinha(pNumLinha++, lnumColunaInicio, lListDados);
}
}
}
Nenhum comentário:
Postar um comentário