martes, 4 de diciembre de 2012

Leer Excel desde Java con POI

Hola tal vez alguna ves hemos necesitado leer un archivo excel desde java y no hemos tenido idea de como hacerlo.
Bueno les traigo un método bien fácil y practico para esto necesitamos usar la api Apache POI.
Adjunto el código para que puedan observarlo.
Admite tanto Xls como Xlsx ,estan separados en métodos distintos para que observen las diferencias.
Para esto necesitaran los siguientes plugins:
  • xbean.jar
  • dom4j-2.0.0-ALPHA-2.jar ( o la version1.4 da lo mismo)
  • poi-ooxml-schemas-3.8-20120326.jar
  • poi-ooxml-3.8-20120326.jar
  • poi-3.8-20120326.jar
CODIGO EJEMPLO:

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
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;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**

 * @author jonathan-palomino.blogspot.com

 */

public class LectorExcel {

 boolean antiguo = false;
 /**

  * Este metodo es usado para leer archivos Excel

  *

  * @param Nombre_Archivo

  *            - Nombre de archivo Excel.

  */
 private void Leer_Archivo_Excel(String Nombre_Archivo) {

  /**

   * Crea una nueva instancia de Lista_Datos_Celda

   */

  List Lista_Datos_Celda = new ArrayList();

  if (Nombre_Archivo.contains(".xlsx")) {

   GENERAR_XLSX(Nombre_Archivo, Lista_Datos_Celda);

   antiguo = false;

  } else if (Nombre_Archivo.contains(".xls")) {

   GENERAR_XLS(Nombre_Archivo, Lista_Datos_Celda);

   antiguo = true;

  }

  /**

   * Llama el metodo Imprimir_Consola para imprimir los datos de la celda

   * en la consola.

   */

  Imprimir_Consola(Lista_Datos_Celda);

 }

 private void GENERAR_XLSX(String Nombre_Archivo, List Lista_Datos_Celda) {

  try {

   /**

    * Crea una nueva instancia de la clase FileInputStream

    */

   FileInputStream fileInputStream = new FileInputStream(

     Nombre_Archivo);

   /**

    * Crea una nueva instancia de la clase XSSFWorkBook

    */

   XSSFWorkbook Libro_trabajo = new XSSFWorkbook(fileInputStream);

   XSSFSheet Hoja_hssf = Libro_trabajo.getSheetAt(0);

   /**

    * Iterar las filas y las celdas de la hoja de cálculo para obtener

    * toda la data.

    */

   Iterator Iterador_de_Fila = Hoja_hssf.rowIterator();

   while (Iterador_de_Fila.hasNext()) {

    XSSFRow Fila_hssf = (XSSFRow) Iterador_de_Fila.next();

    Iterator iterador = Fila_hssf.cellIterator();

    List Lista_celda_temporal = new ArrayList();

    while (iterador.hasNext()) {

     XSSFCell Celda_hssf = (XSSFCell) iterador.next();

     Lista_celda_temporal.add(Celda_hssf);

    }

    Lista_Datos_Celda.add(Lista_celda_temporal);

   }

  } catch (Exception e) {

   e.printStackTrace();

  }

 }

 private void GENERAR_XLS(String Nombre_Archivo, List Lista_Datos_Celda) {

  try {

   /**

    * Crea una nueva instancia de la clase FileInputStream

    */

   FileInputStream fileInputStream = new FileInputStream(

     Nombre_Archivo);

   /**

    * Crea una nueva instancia de la clase POIFSFileSystem

    */

   POIFSFileSystem fsFileSystem = new POIFSFileSystem(fileInputStream);

   /**

    * Crea una nueva instancia de la clase HSSFWorkBook

    */

   HSSFWorkbook Libro_trabajo = new HSSFWorkbook(fsFileSystem);

   HSSFSheet Hoja_hssf = Libro_trabajo.getSheetAt(0);

   /**

    * Iterar las filas y las celdas de la hoja de cálculo para obtener

    * toda la data.

    */

   Iterator Iterador_de_Fila = Hoja_hssf.rowIterator();

   while (Iterador_de_Fila.hasNext()) {

    HSSFRow Fila_hssf = (HSSFRow) Iterador_de_Fila.next();

    Iterator iterador = Fila_hssf.cellIterator();

    List Lista_celda_temporal = new ArrayList();

    while (iterador.hasNext()) {

     HSSFCell Celda_hssf = (HSSFCell) iterador.next();

     Lista_celda_temporal.add(Celda_hssf);

    }

    Lista_Datos_Celda.add(Lista_celda_temporal);

   }

  } catch (Exception e) {

   e.printStackTrace();

  }

 }

 /**

  * Este método se utiliza para imprimir los datos de la celda a la consola.

  *

  * @param Datos_celdas

  *            - Listado de los datos que hay en la hoja de cálculo.

  */

 private void Imprimir_Consola(List Datos_celdas) {

  String Valor_de_celda;

  for (int i = 0; i < Datos_celdas.size(); i++) {

   List Lista_celda_temporal = (List) Datos_celdas.get(i);

   for (int j = 0; j < Lista_celda_temporal.size(); j++) {

    if (antiguo) {

     HSSFCell hssfCell = (HSSFCell) Lista_celda_temporal.get(j);

     Valor_de_celda = hssfCell.toString();

    } else {

     XSSFCell hssfCell = (XSSFCell) Lista_celda_temporal.get(j);

     Valor_de_celda = hssfCell.toString();

    }

    System.out.print(Valor_de_celda + "\t");

   }

   System.out.println();

  }

 }

 public static void main(String[] args) {

  String fileName = "C:" + File.separator + "Users" + File.separator

    + "synccon" + File.separator + "Desktop" + File.separator

    + "abc.xls";

  System.out.println(fileName);

  new LectorExcel().Leer_Archivo_Excel(fileName);

 }

}

Reacciones:

2 comentarios:

  1. Pon los links de descarga de los plugins por fa !!!

    ResponderEliminar
  2. Util dejo las rutas x si alguien mas las necesita :)
    xbean.jar ----> http://www.apache.org/dyn/closer.cgi/xmlbeans
    dom4j-2.0.0-ALPHA-2.jar ( o la version1.4 da lo mismo) ---> http://sourceforge.net/projects/dom4j/files/dom4j-2.0.0-ALPHA-2/
    Lo otro es el poi actual solo hay que fijarse si estan las librerias para XLSX !!!
    Saludos

    ResponderEliminar