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!