Obrigado por visitar a devmedia.com.br!

Precisamos de você para divulgar nossos vídeos e cursos gratuitos para a comunidade.

Se você gosta da devmedia.com.br por favor dê-nos o seu clique para o Google+ e ajude outros desenvolvedores ao redor do mundo.



Obrigado por seu apoio!
Equipe DevMedia

sair sem compartilhar (x)
DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:

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:

 

ggcmaajpp2fig01.jpg 

 

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:

 

ggcmaajpp2fig02.jpg 

 

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!





    11 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Rabinson
Glaucio, como eu posso fazer diretamente a leitura de uma célula em específico, como por exemplo f22? E, também, como eu posso inserir o valor em alguma célula vazia? Abraços e muito obrigado pela ajuda...


em 30/11/2007 15:34 - Responder

 

Juniorm3
Como posso deixar uma coluna inteira da planilha com uma formula definida?


em 24/4/2008 16:10 - Responder

 

  Junior
Olá Junior, utilize um loop for mesmo. Para o um objeto column, vá variando as linhas e copiando o mesmo conteúdo ok?


em 24/4/2008 18:13 - Responder
 

Rbaselio
parabens pelo tutorial, que tem me sido de grande ajuda, o que eu gostaria de saber é como faço para fazer todas essas operações em um documento que ja existe?


em 20/9/2007 14:04 - Responder

 

  Alessandro Morais
Glaucio,parabens pelo tutorial..Gostaria de saber como faço para pegar de uma planilha pra inserir/atualisar tabelas de um determinado banco? Aguardo retono.


em 22/10/2007 09:19 - Responder
 

  Glaucio Guerra
Um exemplo para editar o arquivo já existente: POIFSFileSystemfs= newPOIFSFileSystem(newFileInput Stream("workbook.xls")); HSSFWorkbookwb=newHSSFWorkbook(fs); HSSFSheetsheet=wb.getSheetAt(0); HSSFRowrow= sheet.getRow(2); HSSFCellcell=row.getCell((short)3); if(cell==null) cell=row.createCell((short)3); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue("atest"); //Writetheoutputtoafile FileOutputStreamfileOut=newFileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close();


em 24/4/2008 18:15 - Responder
 

Alexandre
Já consegui fazer surgir a janela de download para o meu .xls. Mas ao abrir ou salvar o arquivo vai corrompido e não deixa abrir travando o excel. Me ajudem por favor...


em 18/6/2008 17:05 - Responder

 

Albécio Clériston Lima Batista
Garoto ???Fazia tempo q estava procurando isso ,e agora encontrei,mas e agora como faço pra ler o conteúdo das celulas ? Já tentei em SQL mas o ResulSet não está lendo os conteúdos !!!Como faço isso ,como referencio ???


em 30/7/2008 07:54 - Responder

 

  Camila Morais
Você sabe se esta biblioteca tem suporte para conversão de um arquivo com extenção xls para um arquivo com extensão csv? ou se existe alguma biblioteca que obtem esta função?




em 25/11/2010 17:10 - Responder
 

  Dyego Souza Do Carmo
Oi !

Voce pode utilizar o jodconverter , ele converte isto para voce :)



em 10/12/2010 16:12 - Responder
 

Bruno Daniel Marinho
em Formatando background não funciona. testei com poi 3.7 e 3.8

demorei algumas horas para encontrar a solução http://apache-poi.1045710.n5.nabble.com/HSSFCellStyle-problems-border-style-background-color-td2291130.html

ate mais


em 30/8/2011 12:11 - Responder

 



Autor
Glaucio Guerra

Há cinco anos atuando com desenvolvimento de software, Glaucio Guerra (glaucioguerra@gmail.com) trabalha como Analista de Sistemas no ambiente Petrobras, no Rio de Janeiro, sendo bacharelando em Ciência da Computação. Atualmente, concentra seus projetos com foco em aplicações JEE voltadas para o ger...


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
12   1
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]
Este post está disponível para assinantes da Java Magazine ou para quem possui Créditos DevMedia.

  Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ -1,00 (assinante) ou R$ -1,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ -1,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03