Como manipular arquivos Excel com Jakarta POI – Parte II

Nesta parte do artigo vamos focar nas funções de formatação de texto, alinhamento, bordas entre outras diversas features que a API fornece.

Na primeira parte do artigo foi descrito como criar uma planilha, adicionar workbooks e inserir conteúdos nas células de um arquivo Excel. Nesta segunda parte vamos focar nas funções de formatação de texto, alinhamento, bordas entre outras diversas features que a API fornece.

 

Formatando Células

Praticamente todas as planilhas em formato Excel precisam de formatação, sejam em bordas,  formatos de data e hora, alinhamentos etc. Neste tutorial vamos descrever algumas dessas funcionalidades .

 

Formatando Datas

Qualquer tipo de formatação de células  está ligada a classe  HSSFCellStyle que representa o estilo da célula no workbook.  O código abaixo configura o HSSFCellStyle para  o formato e data e hora.

 

package glaucioguerra.info.main;

 

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Date;

 

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFDataFormat;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

 

public class Main {

 

        public static void main(String[] args) throws IOException {

               HSSFWorkbook wb = new HSSFWorkbook();

               HSSFSheet sheet1 = wb.createSheet("Planilha");

               HSSFRow row = sheet1.createRow(0);

               HSSFCell celula = row.createCell((short) 0);

               HSSFCellStyle estilo = wb.createCellStyle();

               estilo.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy hh:mm"));

               celula.setCellValue(new Date());

               celula.setCellStyle(estilo);

 

               FileOutputStream stream = new FileOutputStream(

                               "/Users/glaucioguerra/planilha.xls");

               wb.write(stream);

               stream.flush();

               stream.close();

 

        } 

}

 

No código anterior utilizamos a função estática getBuiltinFormat() da classe HSSFDataFormat para formatar o estilo de data e hora, passando um formato como String. Este formato deve estar de acordo com os padrões listados na API. Abaixo seguem alguns deles:

 

0xc, "# ?/?"

0xd, "# ??/??"

0xe, "m/d/yy"

0xf, "d-mmm-yy"

0x10, "d-mmm"

0x11, "mmm-yy"

0x12, "h:mm AM/PM"

0x13, "h:mm:ss AM/PM"

0x14, "h:mm"

0x15, "h:mm:ss"

0x16, "m/d/yy h:mm"

0x2d, "mm:ss"

0x2e, "[h]:mm:ss"

0x2f, "mm:ss.0"

 

Alinhamentos

O alinhamento é fundamental na formatação de planilhas. Através da classe HSSFCellStyle podemos acessar membros estáticos que representam os tipos de alinhamentos. Veja o seguinte código:

 

package glaucioguerra.info.main;

 

import java.io.FileOutputStream;

import java.io.IOException;

 

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

 

public class Main {

 

        public static void main(String[] args) throws IOException {

               HSSFWorkbook wb = new HSSFWorkbook();

               HSSFSheet sheet = wb.createSheet("Planilha");

               HSSFRow row = sheet.createRow((short) 2);

               HSSFCell cell = row.createCell((short) (0));

               cell.setCellValue("Alinhe isto!");

               HSSFCellStyle estilo = wb.createCellStyle();

               estilo.setAlignment(HSSFCellStyle.ALIGN_CENTER);

               cell.setCellStyle(estilo);

               FileOutputStream fileOut = new FileOutputStream("/Users/glaucioguerra/planilha.xls");

               wb.write(fileOut);

               fileOut.close();

 

 

        }

 

}

 

A linha de código estilo.setAlignment(HSSFCellStyle.ALIGN_CENTER); seleciona o tipo de alinhamento, que nada mais é que um inteiro fornecido pela classe HSSFCellStyle. Abaixo seguem os tipos de alinhamento:

 

HSSFCellStyle.ALIGN_CENTER

HSSFCellStyle.ALIGN_CENTER_SELECTION

HSSFCellStyle.ALIGN_FILL

HSSFCellStyle.ALIGN_GENERAL

HSSFCellStyle.ALIGN_JUSTIFY

HSSFCellStyle.ALIGN_LEFT

HSSFCellStyle.ALIGN_RIGHT

 

Bordas

As bordas possuem algumas características, como o tipo, a espessura e a cor.  Todas essas propriedades podem ser alteradas, para cada uma das quatro bordas de uma célula. As bordas são representadas por sua posição: Bottom, Left, Right e Top.  Utilizando o código anterior, adicionaremos bordas para a célula de conteúdo “Alinhe Isto!”.

 

package glaucioguerra.info.main;

 

import java.io.FileOutputStream;

import java.io.IOException;

 

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

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;

 

public class Main {

 

        public static void main(String[] args) throws IOException {

               HSSFWorkbook wb = new HSSFWorkbook();

               HSSFSheet sheet = wb.createSheet("Planilha");

               HSSFRow row = sheet.createRow((short) 2);

               HSSFCell cell = row.createCell((short) (1));

               cell.setCellValue("Alinhe isto!");

               HSSFCellStyle estilo = wb.createCellStyle();

               estilo.setAlignment(HSSFCellStyle.ALIGN_CENTER);

              

               //Adicionando bordas

               estilo.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM);

               estilo.setBottomBorderColor(HSSFColor.BLACK.index);

               estilo.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);

               estilo.setLeftBorderColor(HSSFColor.GREEN.index);

               estilo.setBorderRight(HSSFCellStyle.BORDER_THIN);

               estilo.setRightBorderColor(HSSFColor.BLUE.index);

               estilo.setBorderTop(HSSFCellStyle.BORDER_MEDIUM_DASHED);

               estilo.setTopBorderColor(HSSFColor.BLACK.index);

 

               cell.setCellStyle(estilo);

               FileOutputStream fileOut = new FileOutputStream("/Users/glaucioguerra/planilha.xls");

               wb.write(fileOut);

               fileOut.close();

 

 

        }

 

}

 

A formatação desta célula seria da seguinte forma:

 

 

 

Na borda do topo escolhemos um formato do tipo Dashed de cor preta. A borda esquerda é do tipo Medium de cor verde e a borda de baixo também é Medium mas de cor preta. Repare que neste exemplo nós utilizamos a classe HSSFColor, que trabalha representando as cores.  A utilização desta classe é fundamental para o exemplo a seguir.

 

Formatando background

 

Utilizando o mesmo código, vamos adicionar uma cor de background para a célula em questão utilizando a classe HSSFColor para definir a cor de fundo.

 

public class Main {

 

        public static void main(String[] args) throws IOException {

               HSSFWorkbook wb = new HSSFWorkbook();

               HSSFSheet sheet = wb.createSheet("Planilha");

               HSSFRow row = sheet.createRow((short) 2);

               HSSFCell cell = row.createCell((short) (1));

               cell.setCellValue("Alinhe isto!");

               HSSFCellStyle estilo = wb.createCellStyle();

              

               //Alinhando ao centro

               estilo.setAlignment(HSSFCellStyle.ALIGN_CENTER);

              

               //Adicionando bordas

               estilo.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM);

               estilo.setBottomBorderColor(HSSFColor.BLACK.index);

               estilo.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);

               estilo.setLeftBorderColor(HSSFColor.GREEN.index);

               estilo.setBorderRight(HSSFCellStyle.BORDER_THIN);

               estilo.setRightBorderColor(HSSFColor.BLUE.index);

               estilo.setBorderTop(HSSFCellStyle.BORDER_MEDIUM_DASHED);

               estilo.setTopBorderColor(HSSFColor.BLACK.index);

               estilo.setFillBackgroundColor(HSSFColor.GREEN.index);

 

               cell.setCellStyle(estilo);

               FileOutputStream fileOut = new FileOutputStream("/Users/glaucioguerra/planilha.xls");

               wb.write(fileOut);

               fileOut.close();

 

 

        }

 

}

 

O comando setFillBackgroundColor() seleciona a cor do background e de acordo com o nosso exemplo a célula formatada ficaria:

 

 

 

Mesclando células

O comando de mesclar células também é muito utilizado na formatação de uma planilha. A função addMergeRegion da classe HSSFSheet nos permite mesclar células de acordo com uma região. Essa região é representada pela classe Region onde existem alguns detalhes a serem vistos. 

 

O construtor da classe Region recebe quarto parâmetros. O primeiro é um inteiro  que presenta a linha de origem, logo em seguida um short para a coluna e origem. Os outros dois parâmetros seguem a mesma sequência para a linha e coluna de destino.

 

Region(int rowFrom, short colFrom, int rowTo, short colTo)

 

O objetivo do próximo código é mesclar a célula A1 até a célula F1.

 

public class Main {

 

        public static void main(String[] args) throws IOException {

               HSSFWorkbook wb = new HSSFWorkbook();

               HSSFSheet sheet = wb.createSheet("Planilha");

               HSSFRow row = sheet.createRow((short) 0);

               HSSFCell cell = row.createCell((short) (0));

               cell.setCellValue("Mesclar isto!");

               Region r = new Region(0, (short)0, 0, (short)5);

               sheet.addMergedRegion(r);

       

               FileOutputStream fileOut = new FileOutputStream("/Users/glaucioguerra/planilha.xls");

               wb.write(fileOut);

               fileOut.close();

 

 

        }

 

}

 

Na declaração do Region foi definido que o inicio da região é na linha 0, coluna 0 (A1). Essa região termina na linha 0, coluna 5 (F1).

 

Formantando fontes

Para definir uma fonte é necessário criar uma instancia da classe HSSFFont e definir os seus atributos: nome, tamanho, formatação (negrito, itálico, sublinhado) etc.

 

package glaucioguerra.info.main;

 

import java.io.FileOutputStream;

import java.io.IOException;

 

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;

 

public class Main {

 

        public static void main(String[] args) throws IOException {

               HSSFWorkbook wb = new HSSFWorkbook();

               HSSFSheet sheet = wb.createSheet("Planilha");

               HSSFRow row = sheet.createRow((short) 0);

               HSSFCell cell = row.createCell((short) (0));

               //Formatando a fonte

               HSSFFont fonte = wb.createFont();

               fonte.setFontHeightInPoints((short)24);

               fonte.setFontName("Arial");

               fonte.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

               fonte.setItalic(true);

               fonte.setStrikeout(true);

               HSSFCellStyle estilo = wb.createCellStyle();

               estilo.setFont(fonte);

               cell.setCellStyle(estilo);

               cell.setCellValue("Formato Arial");  

       

               FileOutputStream fileOut = new FileOutputStream("/Users/glaucioguerra/planilha.xls");

               wb.write(fileOut);

               fileOut.close();

 

        }

}

 

Neste exemplo foram utilizados os formatos Bold, Italic, tamanho da fonte, Strikeout (Linha horizontal) e a escolha da fonte.

 

No próximo artigo vamos descrever o processo de leitura e reescrita de uma planilha, algumas features de impressão como selecionar a area de impressão, ajustar a planilha para somente uma página de impressão, formatar cabeçalho, rodapé, zoom etc. Até a próxima!

Artigos relacionados