Leer Archivos Excel en Unix

by Gabriel Gasparolo on 22/02/2006 · 2 comments

Algunas veces las aplicaciones tienen como interfaces archivos que son procesados directamente por usuarios. Esto es porque el usuario está tan conforme con la forma de operar actual que en lugar de desarrollar una nueva interfaz prefiere forzar a las aplicaciones a interpretar archivos “manuales”.

Recientemente tuve que dar soporte a una aplicación para que pudiera tomar datos desde archivos generados por los usuarios. Nada del otro mundo, pensé. La aplicación corre en Unix. Y el archivo que genera el usuario es un archivo Microsoft Excel. Nada del otro mundo, volví a pensar, para eso está POI.

POI

POI es una librería open-source que permite la manipulación de los archivos basados en el formato Microsoft Ole2 Compound Document. POI es Java cien por ciento lo que significa que puedo leer archivos Excel con la misma aplicación en cualquier plataforma para la cual exista una máquina Java (y a la cual se puedan transmitir archivos binarios)

Excel2Txt

Así es que construíuna clase genérica para transformar archivos Excel en archivos de texto cuyo campos estén separados por ‘|’ pipelines:

import java.io.InputStream;
import java.io.IOException;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import java.util.Random;
import java.util.Iterator;
import java.lang.StringBuffer;

import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.hssf.record.*;
import org.apache.poi.hssf.model.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.*;

public class Excel2Txt {
    private String         filename     = null;
    private InputStream    stream       = null;
    private Record[]       records      = null;
    protected HSSFWorkbook hssfworkbook = null;

    public Excel2Txt(String filename) throws IOException   {
        this.filename = filename;
        POIFSFileSystem fs =  new POIFSFileSystem(new FileInputStream(filename));
        hssfworkbook = new HSSFWorkbook(fs);
    }

    public static void main(String [] args) {
		try {
			boolean rowWithData;
			Excel2Txt hssf = new Excel2Txt(args[ 0 ]);

			HSSFWorkbook wb = hssf.hssfworkbook;
			HSSFSheet sheet = wb.getSheetAt( 0 );
			Iterator rowIt = sheet.rowIterator();
			rowIt.next();
			while( rowIt.hasNext() ) {
				HSSFRow row   = (HSSFRow) rowIt.next();
				StringBuffer linData = new StringBuffer( 1024 );
				Iterator cellIt = row.cellIterator();

				for (short c=row.getFirstCellNum(); c<row.getLastCellNum(); c++) {
					HSSFCell cell = row.getCell( c );

					if( cell != null ) {
						switch (cell.getCellType()) {
							case HSSFCell.CELL_TYPE_BLANK :
								linData.append( " |" );
								break;
							case HSSFCell.CELL_TYPE_BOOLEAN :
								linData.append( cell.getBooleanCellValue() + "|" );
								break;
							case HSSFCell.CELL_TYPE_FORMULA :
								linData.append( cell.getStringCellValue() + "|" );
								break;
							case HSSFCell.CELL_TYPE_NUMERIC :
								linData.append( cell.getNumericCellValue() + "|" );
								break;
							case HSSFCell.CELL_TYPE_STRING :
								linData.append( cell.getStringCellValue() + "|" );
								break;
							default :
						}
					}
				}

				System.out.println( linData );

			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Funciona!.



{ 2 comments… read them below or add one }

1 Bit-Man March 26, 2006 at 3:29 pm

Como fan de Perl que soy, hay un modultio que permite trabajar archivos Excel en forma simple : Spreadsheet::WriteExcel (http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel-2.16/lib/Spreadsheet/WriteExcel.pm)

Enjoy !

2 Jose velasquez April 26, 2006 at 3:42 pm

nesecito saber como puedo manejar un arhcivo de excel en java, poder leer los que esta escrito en un hoja de calculo desde java

Previous post:

Next post: