Lo primero que hay que saber es que existe un API para excel, por la tanto lo primero que debemos hacer es ir a la página de sourceforge y descargarlo: jexcelapi_2_6_12.zip.
En el paquete viene mucha información, documentación, código fuente, etc. Pero lo que realmente nos interesa es el archivo jxl.jar que está en el primer nivel tras descomprimir el zip. Incluimos la librería en el proyecto en el que estemos trabajando y listo.
Ahora viene lo complicado, en la librería vienen muchas funciones por lo que su uso para algo tan simple como escribir y leer algunas celdas puede ser complicado. Por eso os dejo una clase Java que tiene dos funciones, una para leer y otra para escribir.
La función ReadExcel devuelve en un String el contenido de una celda. Hay que pasarle el path donde está el archivo excel, el nombre de la hoja y el numero de la celda (Ejemplo: A4).
La función WriteExcel el valor del número que le pasemos en "value" en las columna y filas indicadas (column, row) de la hoja excel (sheet_name) en el archivo excel indicado (excel_file).
Ahora tan solo tienes que llamar a dichas funciones para escribir y leer archivos excel en Java.
Sigue leyendo para ver el código.
import java.io.File;
import jxl.*;
import jxl.write.NumberFormat;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public class ExcelReadWrite {
public String readExcel(String excel_file, String sheet_name, String cell_num)
{
String cellData = new String();
try{
Workbook workbook = Workbook.getWorkbook(new File(excel_file));
//Gets the sheet
Sheet sheet = workbook.getSheet(sheet_name);
/* Reads cell data*/
Cell cell = sheet.getCell(cell_num);
cellData = cell.getContents();
workbook.close();
}
catch(Exception e)
{
System.out.println("readExcel ->"+e);
}
return cellData;
}
public void writeExcel(String excel_file, String sheet_name, int row, int column, Double value)
{
String cellData = new String();
try{
Workbook target_workbook = Workbook.getWorkbook(new File(excel_file));
WritableWorkbook workbook = Workbook.createWorkbook(new File(excel_file), target_workbook);
target_workbook.close();
WritableSheet sheet = workbook.getSheet(sheet_name);
jxl.write.Number number = new jxl.write.Number(column, row, value);
sheet.addCell(number);
workbook.write();
workbook.close();
}
catch(Exception e)
{
System.out.println("writeExcel ->"+e);
}
}
}
Comments
31 Responses to “ Escribir y Leer Archivos Excel en Java ”
Post a Comment | Enviar comentarios ( Atom )
Excelente información estimado, la pondré en práctica
18 de mayo de 2010, 1:58Muy buen aporte, solo que me marca el siguiente error:
8 de julio de 2010, 1:25"writeExcel ->java.lang.NullPointerException"
Sabes como podria solucionarlo??
Como no des un poco más de información está complicado.
9 de julio de 2010, 12:30¿Qué parámetros le has pasado?
Hola disculpen
20 de julio de 2010, 22:32Alguno de ustedes sabe como actualizar o modificar un archivo de excel ya existente desde java
El código que ves es precisamente para eso, la función writeExcel modifica un archivo existente.
21 de julio de 2010, 8:13Un saludo,
Muy bueno, gracias por compartirlo.
2 de septiembre de 2010, 18:44Buenas como estas.
15 de octubre de 2010, 18:26tengo un problema cuando leo una celda con texto y este tiene tildes, el programa me devuelve Vibraci� y lo que me deberia de devolver es Vibración, tengo que configurar el texto a utf8 o que podria ser??
Una pregunta??? este codigo funciona tambien en ambiente web?? o solo es para aplicaciones de escritorio??
2 de noviembre de 2010, 23:34En principio si, lo único que la lectura y escritura del excel tendrás que hacerlo en el servidor y luego hacer algo para descargar el archivo.
3 de noviembre de 2010, 19:24Hola, sólo un comentario ya que hay gente que lo ha preguntado al principio...
24 de noviembre de 2010, 13:11En el método writeExcel, teneis que poner:
WritableSheet sheet = workbook.createSheet(sheet_name,0);
Ya que si no os dará una excepcion, al hacer .getSheet... al escribir teneis que crearla, no obtenerla...
un saludo. Blacos.
Muchas gracias, muy buena aportación.
7 de abril de 2011, 0:02Muy buen ejemplo! Gracias!!!
2 de mayo de 2011, 2:30eeeyyy explica como le mandas el parametro excel_file, es la direccion que debes de poner.
12 de mayo de 2011, 1:43un Exito tu ejemplo papa!!! me re sirvio!! sos groso sabelo!!
28 de octubre de 2011, 16:55lo unico cambie la fila
Cell cell = sheet.getCell(cell_num);
por
Label number = new jxl.write.Label(column, row, string);
para poder meterle Strings en vez de Double!
asi que barbaro justo lo que necesitaba para hacer un programita basico que me pidieron!!
Excelente! , gracias
4 de noviembre de 2011, 5:55tengo un problema, se trata que al ejecutar me niega el acceso a la ubicación , si alguien sabe por que le agradecería mucho que me explicara
9 de enero de 2012, 5:13ya cree el archivo,ya escribe ya lee pero al leer tengo problemas con los decimales no los lee completos
28 de junio de 2012, 18:55Y COMO AGREGO UN STRING A UNA CELDA DE EXCEL
10 de julio de 2012, 5:43¿?¿?¿?
** necesito ayuda **
Hola! Una ayuda por favor:
5 de septiembre de 2012, 23:16¿COMO AGREGO UN STRING A UNA CELDA DE EXCEL EN VEZ DE UN DOUBLE ?? (METODO ESCRIBIR)
Leyendo esto con la necesidad de hacer algo similar, me vi obligado a buscarle como es que debía hacer para meter cadenas, y me di cuenta de que podemos hacer lo siguiente:
28 de noviembre de 2012, 4:56import javax.swing.*; ///Para ver el resultado
import java.io.File;
import jxl.*;
import jxl.write.NumberFormat;
import jxl.write.Label; /// Importamos esto
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public String readExcel(String excel_file, String sheet_name, String cell_num)
{
String cellData = new String();
try{
Workbook workbook = Workbook.getWorkbook(new File(excel_file));
//Gets the sheet
Sheet sheet = workbook.getSheet(sheet_name);
/* Reads cell data*/
Cell cell = sheet.getCell(cell_num);
cellData = cell.getContents();
JOptionPane.showMessageDialog(null,cellData);
workbook.close();
}
catch(Exception e)
{
System.out.println("readExcel ->"+e);
}
return cellData;
}
public void writeExcel(String excel_file, String sheet_name, int row, int column, String string)
{
String cellData = new String();
try{
WritableWorkbook workbook = Workbook.createWorkbook(new File(excel_file));
WritableSheet sheet = workbook.createSheet(sheet_name,0);
Label number = new jxl.write.Label(column, row, string);
sheet.addCell(number);
workbook.write();
workbook.close();
}
catch(Exception e)
{
System.out.println("writeExcel ->"+e);
}
}
al llamarlos lo hacemos de esta manera:
writeExcel("datos.xls","dato",2,3,"imbécil");
y
readExcel("datos.xls","dato","D3");
Buenos dias...
5 de diciembre de 2012, 12:14Tengo el siguiente problema:
En un directorio , por ejemplo C: tengo un documento .xls en el cual ya hay montones de datos introducidos. Utilizando el código que muestran estoy intentando UPDATEAR una de las celdas que yo le indico con el metodo write. Para mi sorpresa lo que ocurre es que borra TODAS las pestañas y Crea una nueva en la que introduce el dato que queria guardar con la consiguiente perdida de datos. ¿hay alguna manera de "Editar" un documento?
he creado un documento de excel. Como hago para que al modificar no se pierda el formato de las celdas.
8 de enero de 2013, 6:19Esta interesante su post, desearía conocer si hay alguna forma de agregar más de una celda, sin perder la información... Gracias..
9 de marzo de 2013, 23:18Para leer un archivo de excel en el servidor, tengo que tener instalado el office en el servidor o con la libreria lo puede leer el servidor sin problemas?
5 de abril de 2013, 23:03nadie parece saber como agregar datos a una hoja de excel existente sin borrar los anteriores....
16 de junio de 2013, 6:37alguien sabe como ponerle el tamaño a las celdas?
24 de agosto de 2013, 0:39Este programa no puede leer achivos de excel con versiones de office mas nuevo.
4 de septiembre de 2013, 19:09Por ejemplo no puede leer achivos con terminacion .xlsx
Alguien que pueda apoyarme con eso?
Muchas Gracias, estoy aprendiendo java y me ha sido de mucha ayuda.
14 de diciembre de 2013, 22:48muchas gracias.
5 de febrero de 2014, 16:52Alguien podria pasarme el codigo entero porque no entendi y me da errores desde ya muchas gracias.
6 de mayo de 2014, 4:14Gracias por el codigo, tendran alguno que solo actualice?
11 de agosto de 2015, 15:25Publicar un comentario
Deja tu opinión realizando un comentario interesante. Cualquier intento de Spam no será admitido.