POI
- Área: Librerías y Utilidades para Aplicaciones Java
- Carácter del recurso: Recomendado
Descripción
Introducción
El proyecto POI consiste en APIs para manipular varios formatos de ficheros basados en el formato de Documento Compuesto OLE 2 de Microsoft, utilizando Java puro. En concreto, se pueden leer y escribir ficheros MS Excel utilizando Java. Pronto se podrá leer y escribir ficheros Word utilizando Java. Entre los ficheros basados en el formato de Documento Compuesto OLE 2 de Microsoft se incluyen la mayor parte de los ficheros de Microsoft Office tales como XLS y DOC así como formatos de fichero basados en el API de serialización MFC.
Actualmente se pueden:
- Leer y escribir ficheros en formato Microsoft Excel (desde 97 hasta 2007)
- Leer y escribir ficheros en formato Microsoft Word (desde 97 hasta 2007, este último no incluido los docx).
- Leer y escribir ficheros en formato Microsoft PowerPoint (desde 97 hasta 2007, este último no incluido los pptx).
- Leer ficheros de Publisher.
- Leer ficheros de Outlook (*.msg).
- Leer ficheros de Visio.
El proyecto Jakarta POI engloba una serie de componentes:
- POIFS: Es el conjunto de APIs para la lectura y escritura del Formato de Documento Compuesto OLE 2 utilizando unicamente Java.
- HSSF: Es el conjunto de APIs para la lectura y escritura de hojas de cálculo de Microsoft Excel 97(-XP) utilizando únicamente Java.
- HWPF: Es el conjunto de APIs para la lectura y escritura de documentos Word 97(-XP) de Microsoft utilizando únicamente Java.
- HPSF: Es el conjunto de APIs para la lectura de conjuntos de propiedades utilizando únicamente Java.
- POI-Utils: Es un conjunto de utilidades de propósito general surgidos en el desarrollo de POI que no han sido implementados en ningún otro sitio.
La parte mas avanzada es HSSF (Horrible Spread Sheet Format) que proporciona un API para crear, leer y modificar ficheros Excel (XSSF si queremos trabajar con excels de 2007 .xlsx). Desde el punto de vista de HSSF los documentos Excel estarían divididos en un Workbook. Este Workbook tendrá uno o más WorkSheet. A su vez, cada WorkSheet posee varias filas que están divididas en columnas.Para utilizar HSSF deberemos seguir los siguientes pasos:
- Crear un WorkBook.
- Crear un WorkSheet asociado al WorkBook previamente creado.
- Determinar las filas/columnas sobre las que voy a actuar y crearlas asociadas al WorkSheet previamente creado.
- Una vez definidas las columnas, deberemos formatear y asignarles valores/fórmulas que queremos que contenga cada una de las mismas.
- Una vez insertado todos los valores que deseamos en las celdas correspondientes, grabar el WorkBook.
Ejemplo de Uso
import java.io.FileInputStream;
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;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class DemoPOI
{
public static void main(String[] args)
{
escribirExcel();
leerExcel();
System.out.println("Ejemplo Finalizado.");
}
public static void escribirExcel()
{
try
{
//Se crea el libro Excel
HSSFWorkbook wb = new HSSFWorkbook();
//Se crea una nueva hoja dentro del libro
HSSFSheet sheet = wb.createSheet("HojaEjemplo");
//Se crea una fila dentro de la hoja
HSSFRow row = sheet.createRow((short)0);
//Creamos celdas de varios tipos
row.createCell((short)0).setCellValue(1);
row.createCell((short)1).setCellValue(1.2);
row.createCell((short)2).setCellValue("ejemplo");
row.createCell((short)3).setCellValue(true);
//Creamos una celda de tipo fecha y la mostramos
//indicando un patrón de formato
HSSFCellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(
HSSFDataFormat.getBuiltinFormat("d/m/yy h:mm"));
HSSFCell cell = row.createCell((short)4);
cell.setCellValue(new Date());
cell.setCellStyle(cellStyle);
//Escribimos los resultados a un fichero Excel
FileOutputStream fileOut =
new FileOutputStream("ejemplo.xls");
wb.write(fileOut);
fileOut.close();
}
catch(IOException e)
{
System.out.println("Error al escribir el fichero.");
}
}
public static void leerExcel()
{
try
{
//Se abre el fichero Excel
POIFSFileSystem fs =
new POIFSFileSystem(
new FileInputStream("c:ejemplo.xls"));
//Se obtiene el libro Excel
HSSFWorkbook wb = new HSSFWorkbook(fs);
//Se obtiene la primera hoja
HSSFSheet sheet = wb.getSheetAt(0);
//Se obtiene la primera fila de la hoja
HSSFRow row = sheet.getRow(0);
//Se leen las primeras 5 celdas
for(int i=0; i<5; i++)
{
//Se obtiene la celda i-esima
HSSFCell cell = row.getCell((short)i);
//Si la celda leida no está vacía
if (cell != null)
{
//Se imprime en pantalla la celda según su tipo
switch(cell.getCellType())
{
case HSSFCell.CELL_TYPE_NUMERIC:
System.out.println("Número: " + cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_STRING:
System.out.println("String: " + cell.getStringCellValue());
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
System.out.println("Boolean: " + cell.getBooleanCellValue());
break;
default:
System.out.println("Default: " + cell.getDateCellValue());
break;
}
}
}
}
catch(IOException ex)
{
System.out.println("Error al leer el fichero.");
}
}
}
Requisitos e incompatibilidades
- poi-3.0.2-FINAL-20080204.jar
- poi-scratchpad-3.0.2-FINAL-20080204.jar
- poi-contrib-3.0.2-FINAL-20080204.jar
- Necesita de Commons Logging y Log4j
- La version de la JDK debe de ser 1.4 o superior