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);
}
}
}
Excelente información estimado, la pondré en práctica
ResponderEliminarMuy buen aporte, solo que me marca el siguiente error:
ResponderEliminar"writeExcel ->java.lang.NullPointerException"
Sabes como podria solucionarlo??
Como no des un poco más de información está complicado.
ResponderEliminar¿Qué parámetros le has pasado?
Hola disculpen
ResponderEliminarAlguno 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.
ResponderEliminarUn saludo,
Muy bueno, gracias por compartirlo.
ResponderEliminarBuenas como estas.
ResponderEliminartengo 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??
ResponderEliminarEn 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.
ResponderEliminarHola, sólo un comentario ya que hay gente que lo ha preguntado al principio...
ResponderEliminarEn 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.
ResponderEliminarMuy buen ejemplo! Gracias!!!
ResponderEliminareeeyyy explica como le mandas el parametro excel_file, es la direccion que debes de poner.
ResponderEliminarun Exito tu ejemplo papa!!! me re sirvio!! sos groso sabelo!!
ResponderEliminarlo 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
ResponderEliminartengo 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
ResponderEliminarya cree el archivo,ya escribe ya lee pero al leer tengo problemas con los decimales no los lee completos
ResponderEliminarY COMO AGREGO UN STRING A UNA CELDA DE EXCEL
ResponderEliminar¿?¿?¿?
** necesito ayuda **
Hola! Una ayuda por favor:
ResponderEliminar¿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:
ResponderEliminarimport 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...
ResponderEliminarTengo 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.
ResponderEliminarEsta interesante su post, desearía conocer si hay alguna forma de agregar más de una celda, sin perder la información... Gracias..
ResponderEliminarPara 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?
ResponderEliminarnadie parece saber como agregar datos a una hoja de excel existente sin borrar los anteriores....
ResponderEliminaralguien sabe como ponerle el tamaño a las celdas?
ResponderEliminarEste programa no puede leer achivos de excel con versiones de office mas nuevo.
ResponderEliminarPor 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.
ResponderEliminarmuchas gracias.
ResponderEliminarAlguien podria pasarme el codigo entero porque no entendi y me da errores desde ya muchas gracias.
ResponderEliminarGracias por el codigo, tendran alguno que solo actualice?
ResponderEliminar