segunda-feira, 16 de novembro de 2015

Geração de Relatorio XLS

 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