Apache POI é uma API popular que permite aos programadores criar, modificar e exibir arquivos do MS Office usando programas Java. É uma biblioteca de código aberto desenvolvida e distribuída pela Apache Software Foundation para projetar ou modificar arquivos do Microsoft Office usando o programa Java. Ele contém classes e métodos para decodificar os dados de entrada do usuário ou um arquivo em documentos do MS Office.

Componentes do Apache POI

O Apache POI contém classes e métodos para trabalhar em todos os documentos compostos OLE2 do MS Office. A lista de componentes desta API é fornecida abaixo.

  • POIFS(Sistema de arquivos de implementação de ofuscação pobre) - Este componente é o fator básico de todos os outros elementos de POI. É usado para ler diferentes arquivos explicitamente.

  • HSSF (Horrible Spreadsheet Format) - É usado para ler e escrever no formato xls de arquivos MS-Excel.

  • XSSF (Formato de planilha XML) - É usado para o formato de arquivo xlsx do MS-Excel.

  • HPSF (Horrible Property Set Format) - É usado para extrair conjuntos de propriedades dos arquivos do MS-Office.

  • HWPF (Horrible Word Processor Format) - É usado para ler e escrever arquivos de extensão de documentos do MS-Word.

  • XWPF (XML Word Processor Format) - É usado para ler e escrever arquivos de extensão docx do MS-Word.

  • HSLF (Horrible Slide Layout Format) - É usado para ler, criar e editar apresentações em PowerPoint.

  • HDGF (Horrible DiaGram Format) - Contém classes e métodos para arquivos binários do MS-Visio.

  • HPBF (Horrible PuBlisher Format) - É usado para ler e gravar arquivos do MS-Publisher.

É uma classe de alto nível no pacote org.apache.poi.hssf.usermodel. Ele implementa a interface da pasta de trabalho e é usado para arquivos do Excel no formato .xls.

É uma classe usada para representar formatos de arquivo Excel de alto e baixo nível. Ele pertence ao pacote org.apache.xssf.usemodel e implementa a interface da pasta de trabalho.

Esta é uma classe do pacote org.apache.poi.hssf.usermodel. Pode criar planilhas excel e permite formatar o estilo da planilha e os dados da planilha.

Esta é uma classe que representa uma representação de alto nível de planilhas Excel. Ele está no pacote org.apache.poi.hssf.usermodel.

Esta é uma classe do pacote org.apache.poi.xssf.usermodel. Ele implementa a interface Row, portanto, pode criar linhas em uma planilha.

Esta é uma classe do pacote org.apache.poi.xssf.usermodel. Ele implementa a interface Cell. É uma representação de alto nível das células nas linhas de uma planilha.

Esta é uma classe do pacote org.apache.poi.xssf.usermodel. Fornecerá possíveis informações sobre o formato do conteúdo em uma célula de uma planilha. Ele também oferece opções para modificar esse formato. Ele implementa a interface CellStyle.

Esta é uma classe do pacote org.apache.poi.hssf.util. Ele fornece cores diferentes como classes aninhadas. Normalmente, essas classes aninhadas são representadas usando seus próprios índices. Ele implementa a interface Color.

Esta é uma classe do pacote org.apache.poi.xssf.usermodel. Ele implementa a interface Font e, portanto, pode lidar com diferentes fontes em uma pasta de trabalho.

Esta é uma classe do pacote org.apache.poi.xssf.usermodel. Ele implementa a interface Hyperlink. É usado para definir um hiperlink para o conteúdo da célula de uma planilha.

Esta é uma classe do pacote org.apache.poi.xssf.usermodel. Ele implementa a interface CreationHelper. É usado como uma classe de suporte para avaliação de fórmulas e configuração de hiperlinks.

Esta é uma classe do pacote org.apache.poi.xsssf.usermodel. Ele implementa a interface PrintSetup. É usado para definir o tamanho, área, opções e configurações da página de impressão.

O seguinte snippet de código é usado para criar uma planilha.

//Create Blank workbook
XSSFWorkbook workbook = new XSSFWorkbook(); 

//Create a blank spreadsheet
XSSFSheet spreadsheet = workbook.createSheet("Sheet Name");

O seguinte trecho de código é usado para criar uma linha.

XSSFRow row = spreadsheet.createRow((short)1);

O seguinte trecho de código é usado para criar uma célula.

//create new workbook
XSSFWorkbook workbook = new XSSFWorkbook();

//create spreadsheet with a name
XSSFSheet spreadsheet = workbook.createSheet("new sheet");

//create first row on a created spreadsheet
XSSFRow row = spreadsheet.createRow(0);

//create first cell on created row
XSSFCell cell = row.createCell(0);

Tipos de células

O tipo de célula especifica se uma célula pode conter strings, valor numérico ou fórmulas. Uma célula de string não pode conter valores numéricos e uma célula numérica não pode conter strings. A seguir são fornecidos os tipos de células, seus valores e sintaxe de tipo.

Tipo de valor da célula Sintaxe de tipo
Valor da célula em branco XSSFCell.CELL_TYPE_BLANK
Valor booleano da célula XSSFCell.CELL_TYPE_BOOLEAN
Valor da célula de erro XSSFCell.CELL_TYPE_ERROR
Valor da célula numérica XSSFCell.CELL_TYPE_NUMERIC
Valor da célula da string XSSFCell.CELL_TYPE_STRING

A classe XSSFCellStyle é usada para definir o estilo de uma célula. O trecho de código a seguir pode ser usado para definir o alinhamento da célula como "Superior esquerdo".

XSSFCellStyle style1 = workbook.createCellStyle();
spreadsheet.setColumnWidth(0, 8000);
style1.setAlignment(XSSFCellStyle.ALIGN_LEFT);
style1.setVerticalAlignment(XSSFCellStyle.VERTICAL_TOP);
cell.setCellValue("Top Left");
cell.setCellStyle(style1);

A classe XSSFFont é usada para adicionar uma fonte a uma célula. O seguinte trecho de código pode ser usado para definir a cor de fundo de uma célula como "Verde".

//Create a new font and alter it.
XSSFFont font = workbook.createFont();
font.setFontHeightInPoints((short) 30);
font.setFontName("IMPACT");
font.setItalic(true);
font.setColor(HSSFColor.BRIGHT_GREEN.index);

//Set font into style
XSSFCellStyle style = workbook.createCellStyle();
style.setFont(font);

A classe XSSFCellStyle pode ser usada para girar uma célula. O trecho de código a seguir pode ser usado para definir o alinhamento do texto da célula em um ângulo especificado.

//90 degrees
XSSFCellStyle myStyle = workbook.createCellStyle();
myStyle.setRotation((short) 90);
cell = row.createCell(5);
cell.setCellValue("90D angle");
cell.setCellStyle(myStyle);

XSSFCell.CELL_TYPE_FORMULA pode ser usado para a célula como uma célula de fórmula.

// Create SUM formula
cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula("SUM(C2:C3)" );
cell = row.createCell(3);
cell.setCellValue("SUM(C2:C3)");

XSSFCell.CELL_TYPE_FORMULA pode ser usado para a célula como uma célula de fórmula.

// Create SUM formula
cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula("POWER(C2:C3)" );
cell = row.createCell(3);
cell.setCellValue("POWER(C2:C3)");

XSSFCell.CELL_TYPE_FORMULA pode ser usado para a célula como uma célula de fórmula.

// Create SUM formula
cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula("MAX(C2:C3)" );
cell = row.createCell(3);
cell.setCellValue("MAX(C2:C3)");

XSSFCell.CELL_TYPE_FORMULA pode ser usado para a célula como uma célula de fórmula.

// Create SUM formula
cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula("FACT(C2)" );
cell = row.createCell(3);
cell.setCellValue("FACT(C2)");

XSSFCell.CELL_TYPE_FORMULA pode ser usado para a célula como uma célula de fórmula.

// Create SUM formula
cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula("SQRT(C2)" );
cell = row.createCell(3);
cell.setCellValue("SQRT(C2)");

XSSFHyperlink pode ser usado para adicionar um hiperlink a uma célula.

CreationHelper createHelper = workbook.getCreationHelper();
XSSFHyperlink link = (XSSFHyperlink)createHelper.createHyperlink(Hyperlink.LINK_URL);
link.setAddress("http://www.tutorialspoint.com/" );
cell.setHyperlink((XSSFHyperlink) link);

O trecho de código a seguir demonstra a configuração da área imprimível de um Excel usando o Apache POI.

XSSFWorkbook workbook = new XSSFWorkbook(); 
XSSFSheet spreadsheet = workbook
.createSheet("Print Area");

//set print area with indexes
workbook.setPrintArea(
   0, //sheet index
   0, //start column
   5, //end column
   0, //start row
   5 //end row
);

//set paper size
spreadsheet.getPrintSetup().setPaperSize(
XSSFPrintSetup.A4_PAPERSIZE);

//set display grid lines or not
spreadsheet.setDisplayGridlines(true);

//set print grid lines or not
spreadsheet.setPrintGridlines(true);