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 }
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 !
nesecito saber como puedo manejar un arhcivo de excel en java, poder leer los que esta escrito en un hoja de calculo desde java
You must log in to post a comment.