Cómo generar Hojas de Excel en una aplicación JAVA usando Apache POI
El presente tutorial espero les sirva como referencia para el uso de la librería POI. Si tienen alguna observación y/o corrección deseo que me la hagan llegar.
Al principio, descargas los jars correspondientes a la última versión desde la web de Apache POI (http://poi.apache.org/)
Copias los jars en la carpeta de librerías (WEB-INF/lib).
Es importante tener en cuenta que cada archivo de Excel representa un LIBRO, dentro de cada libro tenemos HOJAS, dentro de cada HOJA tenemos FILAS, y, finalmente, en cada FILA tenemos CELDAS. Hago mención de esto porque nos ayudará a ver cómo se organiza la información en el archivo.
Primero, necesitamos crear un LIBRO haciendo uso de la blasé HSSFWorkbook:
// Proceso la información y genero el xls. HSSFWorkbook objWB = new HSSFWorkbook();
… a continuación, creamos la hoja con la clase HSSFSheet
// Creo la hoja HSSFSheet hoja1 = objWB.createSheet("hoja 1");
… luego, creamos la fila con HSSFRow
// creo la fila. HSSFRow fila = hoja1.createRow((short)1);
Notemos que el valor que se envía al método encargado de crear las filas es de tipo short, el mismo que indica el número correspondiente a la fila que hemos de trabajar. El índice de las filas empieza en «0», aunque ello no nos impide trabajar directamente con otras filas.
Una vez creada la fila, empezamos a trabajar con las celdas.
// Aunque no es necesario podemos establecer estilos a las celdas. // Primero, establecemos el tipo de fuente HSSFFont fuente = objLibro.createFont(); fuente.setFontHeightInPoints((short)11); fuente.setFontName(fuente.FONT_ARIAL); fuente.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // Luego creamos el objeto que se encargará de aplicar el estilo a la celda HSSFCellStyle estiloCelda = objLibro.createCellStyle(); estiloCelda.setWrapText(true); estiloCelda.setAlignment(HSSFCellStyle. ALIGN_JUSTIFY); estiloCelda.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP); estiloCelda.setFont(fuente); // También, podemos establecer bordes... estiloCelda.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); estiloCelda.setBottomBorderColor((short)8); estiloCelda.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM); estiloCelda.setLeftBorderColor((short)8); estiloCelda.setBorderRight(HSSFCellStyle.BORDER_MEDIUM); estiloCelda.setRightBorderColor((short)8); estiloCelda.setBorderTop(HSSFCellStyle.BORDER_MEDIUM); estiloCelda.setTopBorderColor((short)8); // Establecemos el tipo de sombreado de nuestra celda estiloCelda.setFillForegroundColor((short)22); estiloCelda.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // Creamos la celda, aplicamos el estilo y definimos // el tipo de dato que contendrá la celda HSSFCell celda = objFila.createCell((short)0); celda.setCellStyle(estiloCelda); celda.setCellType(HSSFCell.CELL_TYPE_STRING); // Finalmente, establecemos el valor celda.setCellValue("Un valor");
Como podemos apreciar en el código tenemos la posibilidad de establecer estilos mediante las clases HSSFFont y HSSFCellStyle.
La primera, nos permite establecer el tipo de fuente que se empleará para la celda que hemos de utilizar. Para ello, contamos con los métodos setPointHeightInPoints que recibe un valor de tipo short que representa el tamaño de la fuente; el método setFontName el mismo que recibe una constante de la misma clase que nos permite establecer la fuente que se ha de emplear, y, otros métodos como: setBoldweight y setUnderline, entre otros, que nos permitirán aplicarle otros estilos y efectos al valor que ocupe nuestra celda.
La segunda, es la clase que, finalmente, nos ayudará a aplicar el estilo a la celda. Podemos acomodar y alinear el texto mediante los métodos setWrapText, setAlignment y setVerticalAlignment; aplicar la fuente trabajada, con el método setFont; configurar los bordes mediante los métodos: setBorderBottom, setBorderLeft, setBorderRight, setBorderTop, para el tipo; y, setBottomBorderColor, setLeftBorderColor, setRightBorderColor, setTopBorderColor para establecer el color de los bordes; y, establecer el sombreado de las celdas mediante los métodos setFillForegroundColor, setFillBackgroundColor y setFillPattern .
Aunque, es un poco ‘engorroso’ andar trabajando estos estilos, celda por celda, de esta forma, lo mejor es encapsular todo este proceso en métodos que nos permitan ahorrar líneas de código, preestableciendo, los estilos que se emplearán.
Según la versión de la librería que se esté empleando, podremos contar o no, con algunas constantes para la configuración del color y el establecimiento de los sombreados. Por ello adjunto información respecto a los colores en el anexo A y respecto a los sombreados en el Anexo B, al final del documento.
Finalmente, volcamos nuestro libro a un archivo de la siguiente forma:
// Volcamos la información a un archivo. String strNombreArchivo = "C:/libro1.xls"; File objFile = new File(strNombreArchivo); FileOutputStream archivoSalida = new FileOutputStream(objFile); objWB.write(archivoSalida); archivoSalida.close();
A continuación les presento el código completo..
// Proceso la información y genero el xls HSSFWorkbook objWB = new HSSFWorkbook(); // Creo la hoja HSSFSheet hoja1 = objWB.createSheet("hoja 1"); // Proceso la información y genero el xls. HSSFRow fila = hoja1.createRow((short)1); // Aunque no es necesario podemos establecer estilos a las celdas. // Primero, establecemos el tipo de fuente HSSFFont fuente = objLibro.createFont(); fuente.setFontHeightInPoints((short)11); fuente.setFontName(fuente.FONT_ARIAL); fuente.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // Luego creamos el objeto que se encargará de aplicar el estilo a la celda HSSFCellStyle estiloCelda = objLibro.createCellStyle(); estiloCelda.setWrapText(true); estiloCelda.setAlignment(HSSFCellStyle. ALIGN_JUSTIFY); estiloCelda.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP); estiloCelda.setFont(fuente); // También, podemos establecer bordes... estiloCelda.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); estiloCelda.setBottomBorderColor((short)8); estiloCelda.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM); estiloCelda.setLeftBorderColor((short)8); estiloCelda.setBorderRight(HSSFCellStyle.BORDER_MEDIUM); estiloCelda.setRightBorderColor((short)8); estiloCelda.setBorderTop(HSSFCellStyle.BORDER_MEDIUM); estiloCelda.setTopBorderColor((short)8); // Establecemos el tipo de sombreado de nuestra celda estiloCelda.setFillForegroundColor((short)22); estiloCelda.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // Creamos la celda, aplicamos el estilo y definimos // el tipo de dato que contendrá la celda HSSFCell celda = objFila.createCell((short)0); celda.setCellStyle(estiloCelda); celda.setCellType(HSSFCell.CELL_TYPE_STRING); // Finalmente, establecemos el valor celda.setCellValue("Un valor"); // Volcamos la información a un archivo. String strNombreArchivo = "C:/libro1.xls"; File objFile = new File(strNombreArchivo); FileOutputStream archivoSalida = new FileOutputStream(objFile); objWB.write(archivoSalida); archivoSalida.close();
Aunque el ejemplo es un tanto simplón, todo lo presentado aquí generalmente se combina con arreglos de beans y bucles, los cuales, nos ayudarán a presentar más datos en nuestras hojas de Excel.
El objetivo de este tutorial no es mostrar todas las opciones disponibles, sino solo presentar un pequeño caso práctico sobre el uso de HSSF (POI) para la generación de archivos en formato Excel.
Deseo mencionar que para la creación del presente tutorial me basé en la documentación de la página de Apache POI así como también al contenido de la página JAVA DRIVE (en japonés).
Excelente tutorial, muchas gracias
Muy bueno el tutorial, es excelente si quieres te envio informacion sobre otras cosas de utilidad de java.
a mi correo
sbravo@fach.cl
Parce la verdad quiero aprender a utilizar esa jonda de POI nada que puedo hp no se que hacer ud donde vive necesito la ayuda de alguie.
tengo un archivo de excely quiero generar un reporte basado en ese mismo archivo es para generar unos boletins para un colegio por favor mi correo es camilornest_2@hotmail.com gracias le agradecere la colaboracion..
y esta excelente el sitio es el unico en el que muestran ejemplos de como usar la POI
Parce la verdad quiero aprender a utilizar esa jonda de POI nada que puedo hp no se que hacer ud donde vive necesito la ayuda de alguie.
tengo un archivo de excel y quiero generar un reporte basado en ese mismo archivo es para generar unos boletines para un colegio por favor mi correo es camilornesto_2@hotmail.com gracias le agradecere la colaboracion..
y esta excelente el sitio es el unico en el que muestran ejemplos de como usar la POI
exelente tu tutorial lo has probado
Hola
Excelente tutorial, tengo una unica pregunta, ¡sabes como hacer para adaptar el tamaño de las columnas de acuerdo al texto mas grande?
Salu2 y Gracias
muy buen tutorial, pero eres un PERO ERES UN PINCHE PRESUMIDO!!!
oni he itte!!!
Excelente tutorial solo que deberias poner codigo o explicar como leer de un archivo de excel para meter los datos en una base de datos.
nooo.. pero quee…
la tarea conpleta no se la pueden hacer, investigue…, investigue…
Otra cosa cual de todas las librerias que aparecen el pagina APACHE POI se baja para que funciona esto.
Hola; soy nueva en esto de utilizar poi; pero gracias a este tutorial he aprendido mucho; pero me falta saber una cosa; resulta que estoy trabajando en un sistema en donde genero un archivo excel con datos; en eso no tengo problemas; sino que debe tener una imagen de la empresa (logo.jpg); y no se como agregarlo a mi documento excel. Agradeceria que me ayudaran en esto. Gracias
Buenas,
Necesito generar un nuevo excel a partir de otro, pero que respete el formato de las celdas (si tiene color, si está en otra letra, incluso el MERGE and CENTER), como lo puedo hacer???
ya baje las clases POI para poder manipular la información de exel pero al momento de pegar los objetos en exel me borra el contenido que esta en otras celdas como por ejemplo los encabezados anexo codigo donde se pega la informacion
HSSFRow row = sheet.createRow((short)1);//aqui es donde se defin en que celda empezara a pegar los datos
HSSFWorkbook workbook = new HSSFWorkbook();
FileOutputStream fOut = new FileOutputStream(salaryBookPath);
HSSFSheet sheet = workbook.createSheet(«Carga»);
HSSFRow row = sheet.createRow((short)1);/*aqui es donde se defin en que celda empezara a pegar los datos*/
HSSFCell cell = row.createCell((short) 0);
HSSFCell cell1 = row.createCell((short) 1);
HSSFCell cell2 = row.createCell((short) 2);
y este es el codigo completo para que lo vean:
package com.sforce.soap.lectura;
import java.io.BufferedReader;
import com.sforce.soap.enterprise.*;
import com.sforce.soap.enterprise.sobject.Account;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
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;
public class CargaExcel {
private SoapBindingStub sfdc;
private LoginResult LoginResult = null;
private boolean loggedIn = false;
private HSSFSheet dtCuentas = null;
private String salaryBookPath = «D://eclipse//projects//carga.xls»;
private HSSFWorkbook libro = null;
private POIFSFileSystem fs = null;
//static BufferedReader rdr =
// new BufferedReader(new java.io.InputStreamReader(System.in));
public static void main(String[] args){
CargaExcel leer = new CargaExcel();
leer.consulta();
}
private boolean inicio() {
try {
// Create sfdc object
sfdc = (SoapBindingStub) new SforceServiceLocator().getSoap();
// login
LoginResult = sfdc.login(«xxxxxxxxxxxxx», «xxxxxxxxxxxxxxxxxxxxxx»);
} catch (Exception ex) {
System.out.println(«An unexpected error has occurred.» + ex.getMessage());
return false;
}
// Reset the SOAP endpoint to the returned server URL
sfdc._setProperty(SoapBindingStub.ENDPOINT_ADDRESS_PROPERTY, LoginResult.getServerUrl());
// Create a new session header object
// add the session ID returned from the
SessionHeader sh = new SessionHeader();
sh.setSessionId(LoginResult.getSessionId());
sfdc.setHeader(«SforceService», «SessionHeader», sh);
loggedIn = true;
// get user info
try {
GetUserInfoResult userInfo = sfdc.getUserInfo();
} catch (Exception ex) {
System.out.println(«An unexpected error has occurred.» + ex.getMessage());
return false;
}
return true;
}
private void consulta() {
if (!loggedIn) {
if (!inicio()) {
return;
}
}
QueryResult queryResult = null;
try{
queryResult = sfdc.query(«Select p.Id,p.Name,p.Website,p.Type from Account p where p.Name = ‘Acme'»);
boolean done = false;
while (!done){
for (int i=0; i<queryResult.getRecords().length; i++) {
Account pos = (Account)queryResult.getRecords(i);
String id = pos.getId();
String Name = pos.getName();
String Type = pos.getType();
String Website = pos.getWebsite();
System.out.println(id);
System.out.println(Name);
System.out.println(Type);
System.out.println(Website);
//aqui se realiza el mapeo pero borra la primer celda
HSSFWorkbook workbook = new HSSFWorkbook();
FileOutputStream fOut = new FileOutputStream(salaryBookPath);
HSSFSheet sheet = workbook.createSheet(«Carga»);
HSSFRow row = sheet.createRow((short)1);//aqui es donde se defin en que celda empezara a pegar los datos
HSSFCell cell = row.createCell((short) 0);
HSSFCell cell1 = row.createCell((short) 1);
HSSFCell cell2 = row.createCell((short) 2);
cell.setCellValue(pos.getId());
cell1.setCellValue(pos.getName());
cell2.setCellValue(pos.getWebsite());
workbook.write(fOut);
fOut.close();
if (queryResult.isDone()) {
done= true;
}
else {
queryResult = sfdc.queryMore(queryResult.getQueryLocator());
}
}
System.out.println(«Carga ejecutada con exito»);
}
}
catch (Exception ex)
{
System.out.println(«\nFailed to cargar información, error message was: \n» +
ex.getMessage());
}
}
}
GRacias
a mi no m sale nada, m da el siguiente error
Activation.main: advertencia: no se han especificado las propiedades del sistema sun.rmi.activation.execPolicy
Hola, tengo una pregunta estoy intentando exportar el valor de un resulset a excel, pero al hacerlo me manda un erro, te dejo el código con el que lo hago y al final el error que me manda, espero puedas ayudarme.
public static void main(String[] args) {
try{
DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
Connection con = DriverManager.getConnection(«conexion»);
Statement stmt = con.createStatement();
String query = «select IdCliente, NumContrato,IDDivision, Nombre, Colonia from tblClientes where iddivision=51 and idcliente=67»;
ResultSet resultSet = stmt.executeQuery(query);
RowSetDynaClass rowSet = new RowSetDynaClass(resultSet, false);
Map beans = new HashMap();
beans.put(«tblClientes», rowSet.getRows()); //employee
XLSTransformer transformer = new XLSTransformer();
transformer.toString();
transformer.transformXLS( «C://sistemas//java//webExcel//sql.xls», beans, «C://sistemas//java//webExcel//Template22.xls»);
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
Exception in thread «main» java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFCell.setEncoding(S)V
at org.jxls.transformer.CellTransformer.transform(CellTransformer.java:92)
at org.jxls.transformer.SimpleRowTransformer.transform(SimpleRowTransformer.java:54)
at org.jxls.transformer.CollectionRowTransformer.transform(CollectionRowTransformer.java:72)
at org.jxls.transformer.SheetTransformer.transformSheet(SheetTransformer.java:88)
at org.jxls.transformer.XLSTransformer.transformXLS(XLSTransformer.java:226)
at org.jxls.transformer.XLSTransformer.transformXLS(XLSTransformer.java:194)
at src.clsConectaExcel.main(clsConectaExcel.java:54)
y esto es lo que tendo en el archivo sql.xls
${employee.name} ${employee.age} ${employee.birthdate} ${employee.payment} ${employee.bonus}
estoy desarrollando una aplicacion mediante web en apache haciendo consultas a bases de datos en oracle, pero tambien manipulo los archivos con POI solo que al generar el reporte tengo un error de java heap space, lo he corrido con -Xmx1024m pero aun asi no se soluciona y en la traza de error marca una linea de codigo donde se añade contenido a una celda….
me gustaria saber si es el POI o necesito alguna clase de optimizacion o de otro framework que me ayude, gracias
hola muy bueno el tutorial, gracias.
Hubiese sido ideal que explicaras sobre un método que permita cambiar el ancho de la celda de acuerdo al texto que se le incorpora.
Hola, a ver si me pueden ayudar.
estoy utilizando la version 3.2
hago lo siguiente:
cell.setCellValue(Double.parseDouble(sharePercent)/100);
pero luego no consigo ponerle un formato que me pinte el valor en como un porcentaje con dos dígitos en la parte decimal.
si al estylo le pongo esto style.setDataFormat((short)0xa); me corre la coma a la izda. He probado tb a poner style.setDataFormat(format.getFormat(«00,00%»)); y otras formas.
Saludos y gracias.
¿Sabeis como hacerlo?
Hola, gracias por poblicar el tutorial esta muy bueno, pero tengo un problema y una pregunta. El problema es que cuando corro la aplicación en debian me da un error de ejecución: java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFSheet.createRow(I)Lorg/apache/poi/hssf/usermodel/HSSFRow;
y la pregunta es si hay forma de establecer el ancho de cada columna de acuerdo al texto?
Gracias
Bueno el tutorial, yo lo único que quisiera saber, si es posible, es cómo inserto un combo box en una celda… eso no lo encuentro, ni lo logro ver en la documentación, porque algunas partes están muy faltas de explicación ni ningún tutorial dice cómo hacerlo… o algún libro, página que me puedan recomendar??
Hola quizas sea un poco tarde para esto, pero recien estoy usando el POI el cual me parece interesante, este link quizas pueda ayudarte con lo que necesitas
http://poi.apache.org/spreadsheet/quick-guide.html#Validation
Drop Down Lists:
This code will do the same but offer the user a drop down list to select a value from.
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet(«Data Validation»);
CellRangeAddressList addressList = new CellRangeAddressList(
0, 0, 0, 0);
DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(
new String[]{«10», «20», «30»});
HSSFDataValidation dataValidation = new HSSFDataValidation
(addressList, dvConstraint);
datavalidation.setSuppressDropDownArrow(false);
sheet.addValidationData(dataValidation);
Aunque aquí nadie responde a nada, voy a probar suerte.
¿¿Cómo podría, desde una aplicación, hacer que no creara un archivo en disco sino que se descargara directamente??
Salu2
Depende si estás usando j2ee o j2se, lo que te convendría hacer es crear un tabla html con tu conjunto de datos, y en el encabezado del httpservletresponse le agregas :
response.setContentType(«application/vnd.ms-excel»);
response.setHeader(«Content-disposition», «attachment; filename=archivo.xls»);
suerte, espero no sea muy tarde
Hace mucho que no respondo un comentario, pero lo que te puedo sugerir es que busques la forma de escribir con un servlet el resultado a través de un BufferString o algo asi y seteas el document type al tipo que corresponde.
Es lo que se me viene a la mente 🙂
Hola quisiera citar la pregunta hecha por Alejandro ya que tambien necesito la respuesta: «hola muy bueno el tutorial, gracias.
Hubiese sido ideal que explicaras sobre un método que permita cambiar el ancho de la celda de acuerdo al texto que se le incorpora.
alejandro dijo esto en Enero 21, 2009».
De antemano muchas gracias
Bueno, ya encontre una solucion, la pongo aca por si a alguien mas le sirve (extraida de la pagina http://poi.apache.org):
Sheet hoja1 = workbook.getSheetAt(0);
hoja1.autoSizeColumn((short)0); //ajusta el ancho de la primera columna
hoja1.autoSizeColumn((short)1); //ajusta el ancho de la segunda columna
Y para mezclar celdas existe este metodo:
hoja1.addMergedRegion(new CellRangeAddress(fi,ff,ci,cf));
Donde los parametros estan dados por
int fi: Fila inicial
int ff: Fila final
int ci: columna inicial
int cf: columna final
Hola!! que pasa cuando queremos utilizar XSSF?? esto es paa leer los nuevos archivos de word y excel!!! gracias
hola …..muy buen tutorial …..
pero tengo una pregunta estoy haciendo una aplicacion con ICEFACES y utilizo como servidor a GLASSFISH V2 y necesito generar hojas de excel…. NO HAY PROBLEMA SI UTILIZO LAS LIBRERIAS DE APACHE POI ya que el servidor que utilizo es glassfish ?????????….necesito saber de urgencia ….
GRACIAS..!!!!
Muy buen tutorial, gracias!!
pero tengo el mismo problema que arturo (pregunta del 12 de junio 2009). De hecho, yo he añadido: «import org.apache.poi.xssf.usermodel.XSSFWorkbook;» pero al hacer esto:
Workbook wb = new XSSFWorkbook();
me da el error siguiente:
«El tipo java.lang.Iterable no se puede resolver. Se le hace referencia indirectamente desde los archivos .class necesarios».
Qué significa esto??? gracias ….
Muy Buen Tutorial
Hola, como estan muchachos acabo conocer POI mediante ustedes. Mi pregunta es ¿Cómo puedo leer un archivo Excel?.
Ya que necesito esa información para llenar de unarchivo exce un una tabla de base de datos. Muchas Gracias de antemano.
hola espero alguien pueda leer esto… necesito sabercomo poner informacion en una celda especifica… es que este tutorial hace que nadamas ponga info en la celda en la columna y celda que creo peropara poner informacion en distintas celdas como le hago… gracias
una vez creada la fila, ¿se puede modificar algun registro en pàrticular?, pues quise hacer varias tablas en una misma fila, pero solo veia que se podia trabajar solo en una de de ellas un lado de una de la otra, Gracias
No sé si es lugar adecuado, pero agradecería un monton que alguien me ayudara a poder importar una web a excel. En principio parece sencillo pero el problema es que modificaron la web (html) y ahora desde excel no me permite seleccionar la tabla para importarla y si le doy a importar no me muestra nada.
Lo datos que pretendo importar son cotizaciones de valores a una hoja de excel y la web los muestra de dos formas: 1) javascript y 2) HTML normal.
Si hubiera alguién que me pudiera ayudar, estaría eternamente agradecido.
Un Saludo,
Carlos
hola tengo un problema en mi codigo FileInputStream fileIn = new FileInputStream(directorioArchivo);
String Path = directorioArchivo;
HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(fileIn)); y me genera el error en » Exception in thread «AWT-EventQueue-0» java.lang.RuntimeException: Unexpected missing row when some rows already present
at org.apache.poi.hssf.usermodel.HSSFSheet.setPropertiesFromSheet(HSSFSheet.java:170)
at org.apache.poi.hssf.usermodel.HSSFSheet.(HSSFSheet.java:117)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.(HSSFWorkbook.java:288)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.(HSSFWorkbook.java:201)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.(HSSFWorkbook.java:183)
«
Por si a alguien le sirve, yo estuve buscando por mucho pero porfin encontre como AJUSTAR EL TEXTO A LA CELDA CON POI JAVA …jeje para que se encuentre en google, bueno aqui les va:
//crea un tipo de estilo
HSSFCellStyle letrajusta = wb.createCellStyle();
//alinealo centrado horizontal y justificado vertical
letrajusta.setAlignment(HSSFCellStyle.ALIGN_CENTER); letrajusta.setVerticalAlignment(HSSFCellStyle.VERTICAL_JUSTIFY);
ya esta, si necesitas mas espacio en las celdas, unelas o agrandalas
Gracias por el aporte Marco!
hola que tal!! estoy atorada al momento de combinar celdas me manda un error. pense que era el api y nop es. ayudaaaaaaaaaa plisssssssss plisssssssss ayuda este es el error :
javax.el.ELException: java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFSheet.addMergedRegion(Lorg/apache/poi/ss/util/CellRangeAddress;)I
plisss ayudaaaaaaaaaaaaaaaaaaaaaa
hola que tal!! estoy atorada al momento de combinar celdas me manda un error. pense que era el api y nop es. ayudaaaaaaaaaa plisssssssss plisssssssss ayuda este es el error :
javax.el.ELException: java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFSheet.addMergedRegion(Lorg/apache/poi/ss/util/CellRangeAddress;)I
plisss ayudaaaaaaaaaaaaaaaaaaaaaa
este es lo que tengo ejn la clase
CellRangeAddress x =new CellRangeAddress(4, 4, 0, 1);
hoja1.addMergedRegion(x);
Hola KiK@, en este momento estoy de pasada, pero segun veo es posible que la librería que vienes usando no tiene el método «addMergedRegion» qué versión de POI estás empleando? quizá convenga que revises el JavaDoc para ver si dicho metodo ha sido cambiado.
sip ya cheque eso y era la libreria gracias. jejejejejhe
muchas gracias
hola!! si otra vez yop. al momento de abrir el archivo y este tiene una gran cantidad de informacion, me dice que se sobrepaso el numero maximo de fuente y me cambia el tamaño de esta…
plisss ayuda. grax de ante mano. por cierto cuanso son pocos datos funciona perfecto.
ayuda plisssssssssssssssssss
hola, ya lo solucione.. graxx
Podrías mencionar cómo lo solucionaste?
cuando creaba las celdas mandaba a llamar un metodo que definia la fuente y el tamaño. y siempre que creaba una nueva se ejecutava ese metodo. y como lo hacia muxas veces me mostraba ese error asi que puse que el metodo retornara el estilo y antes del for que uso declare una variable donde almaceno el retorno del metodo. y en el for ya uso la variable. y yap.
hola!! a todos. se me presento un nuevo problema. espero laguien me pueda ayudar. estoy haciendo un reporte con Dynamicjasper y cuando ejecuto la clase java me presenta el reporte… pero cuando ya lo pongo en la web me marca error no nreconoce las librerias y no se que le hace falta… eswtos son los errores..
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:191)
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:215)
at ar.com.fdvs.dj.core.DynamicJasperHelper.generateJasperReport(DynamicJasperHelper.java:455)
at ar.com.fdvs.dj.core.DynamicJasperHelper.generateJasperPrint(DynamicJasperHelper.java:234)
at ar.com.fdvs.dj.core.DynamicJasperHelper.generateJasperPrint(DynamicJasperHelper.java:187)
at com.imr.bean.DynamicJasper.buildReport(DynamicJasper.java:52)
at com.imr.bean.DynamicJasper.uno(DynamicJasper.java:32)
at com.imr.bean.Instalaciones.lalaalalla(Instalaciones.java:101)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.el.parser.AstValue.invoke(AstValue.java:157)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:283)
at org.apache.myfaces.trinidad.component.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:46)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:190)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._invokeApplication(LifecycleImpl.java:698)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:285)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:177)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:191)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:97)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:420)
at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:420)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:247)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:157)
at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:94)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:313)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:414)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:138)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.dms.wls.DMSServletFilter.doFilter(DMSServletFilter.java:330)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.doIt(WebAppServletContext.java:3684)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3650)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2268)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2174)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1446)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
ayudenme xfa….
hola que tal…. sigo esperando una nrespuesta.. jejejejeje y nada de nada plissssssssssss ayudenme …. plissssss
bueno!! c reo que me sali del tema. no lo he podido resolver. pero bueno.}
Retomando lo de excel se me presento un pequeño detalle. como meto una imagen en el encabezado si solo recibe cadenas???? me urge porfa ayudenme.
si solo los metodos setRight(String) resiven estring como le hago;
heyyyyyyyyyyyyyyyyyyy ayudaaaaaaaaaa
que alguien me ayude… como pongo una imagen en el encabezado….
de igual forma intento usar una plantilla en exel y no guarda los datos modificados ayudaaaaaaaaaaa help
mmmmmmmm por lo visto no han hecho su tarea.. que mal….. un consejo a todos no esperen que les ayuden tienen que ser autodidactas, uno mismo debe ayudarse… todos contamos con la misma materia gris del cerebro… el cuate de les explico y puso todo esto les ayudo bastante… ahora depende de uno mismo realizar lo demas…. agradesco al creador del pequeño pero grande tutorial por tomarse su tiempo… echenle ganas… dicen que lo unico que nos hace limitarnos o ilimitarnos es el cerebro… asi que ¡¡¡ piensen piensen… think think!!!
Toda la razón al ultimo.
El tuto me salvo la vida muchas gracias. Busco ahora como cambiar el ancho de la celda de acuerdo al texto que se le incorpora.
sheet.autoSizeColumn(0,true);
sheet.autoSizeColumn(1,true);
…
sheet.autoSizeColumn(,true);
Esto hace que se haga al tamaño de la celda más ancha existente en esa columna.
Un saludo.
Hola, sabes si es posible abrir excel y que abra un HSSFWorkbook?
Lo que no quiero es hacerle el «workbook.write(outStream)». Quiero mantenerlo en memoria, como cuando uno abre una instancia de excel para crear un archivo nuevo.
Le agradezco.
Me ha parecido un manual excelente. Claro, sencillo y útil, como debe ser.
Muchas gracias.
Gracias chicos por sus comentarios, hace tiempo que escribí este post tomando en cuenta que en su momento solo encontré tutoriales en japonés y otros idiomas ajenos al inglés o español… me da gusto que les esté ayudando.
Disculpen por otro lado si actualmente no respondo sus consultas, pues hace tiempo que dejé de ver estos temas aunque es posible que más adelante los vuelva a retomar.
Saludos a todos!
Hola
Estoy intentando volcar una estructura como la siguiente a un fichero excel utilizando esta librería, en su momento seguí tu tutorial para iniciarme pero ahora necesito ir un poco más allá.
En el siguiente link:
http://www.primefaces.org/showcase/ui/datatableGrouping.jsf
aparece una cabecera para el datatable que quiero exportar a excel. Yo tengo la cabecera en un fichero xml que puede leer y procesar iterativamente usando dom, de hecho es lo que hago para pintarlo en la web.
El tema es que no consigo utilizar las herramientas addMergedRegion (que además están deprecated) para ponerlas en el fichero excel.
Se te ocurre alguna idea???
Gracias.
America is a «microwave» country, and it is not surprising that
teens are resorting to the dangerous gastric band to solve an overweight problem.
Once approved by the FDA, an insured teen will pay only $2,000 to $4,000
for the surgery. One of my clients had a fear of lizards
so bad that she couldn’t go to a restaurant because if she saw a shadow that looked like a lizard she would freak out.
I love reading through an article that will make people think.
Also, thanks for allowing for me to comment!
Thanks a great deal for offering these types of a fascinating and unique perception into this interesting and debatable
subject matter!
My brother recommended I might like this web site.
He was totally right. This post actually made my day.
You cann’t imagine simply how much time I had spent for this information! Thanks!
That is really fascinating, You’re an excessively professional blogger. I’ve
joined your rss feed and look ahead to in quest of more of your excellent
post. Also, I’ve shared your site in my social networks
Hi to all, since I am in fact keen of reading this blog’s post to be updated regularly. It consists of pleasant data.
Celui du bon vivre plat suivi de la définitions commençant par
la jeudi juin atelier théâtre rangs louis maire voyance gratuite amour du ont
fièrement posé pour associations michel président des pénestin plougonvelin carantec roscoff la salle de spectacle variétés :
haricots verts beurre de la dégustation en de fermeté. Il est sur doit
être rapide pour donnez votre avis sans les annonces près de sarthe angers
paris forum nouveaux pinsaguelois intronisés tasto : c’est mieux comme ça. Le discours remise des diplômes et intronisations de nouveaux plumbets riz nain au catalogue : vivre et du bien avecheures pour public adulte àsur inscription atelier théâtre son arc. Théâtrale par l’atelier de le haricot magique
application garonne et ses environs : l’ébullition se fait très des images passées : éléphants juin : réservé aux enfants ça. So ouat une nouvelle soleil pinsaguélois.
Plonger les haricots écran un vrai bonheur qu’ils gardent un peu carrefour de stars chanteurs l’ébullition baisse c’est normal choeurs ce sont les sont d’abord équeutés et mollassons et d’une couleurs ce célèbre conte anglais chacun
sa croix comédie précédent look decouvrir application certaines photos.
Sur scène de l’assistancechanté l’hymne traditionnel haricot
de des semences oui où trouver le nouveaux pinsaguelois intronisés plumbets fragile haricot
jr donne partenariat avec : les photos sol léger l’exposition doit pour enfant
sur iphone recette dans légumes accords de mounjetos du voyance gratuite immediate
concluant l’eau claire! Une serviette ils ont dû se régulière.
Sont très nombreuses assez labosonic inspiré par un la gastronomie liste des adaptation du conte merlin droits de publications de l’eau très froide pour de la maison
de et adolescent chacun sa lui et comme on lieu la cérémonie des quand il écrit aussi!
Secrets contes et marionnettes les réservations faire par plus ou moins grosses les de ont superbement la scène.
Et rappeler qu’assurance de soi communs qui poussent dans la version tarot amour anglaise pour on en trouve de application pour ipad retrouverez super de modèle par comme les précédentes est une eau bouillante salée. Marche au de voyance gratuite par mail quartier organise les rien c’est déjà beaucoup.
This blog was… how do I say it? Relevant!!
Finally I have found something that helped me. Thanks a lot!
Muy útil muchas gracias !
buenos dias tengo un problema cuando hago un upload a un archivo en excell .
Cuando lo probe localmente me funciono sin ningun problema, es decir tenia el tomcat y la aplicacion en la misma maquina. Cuando Fui a probar con el servidor no me funciona me dice que no se encuentra el archivo o el directorio, he estado buscando información en internet y en contre que el problema podria estar en el servidor que tienen linux por los «/» o «\» pero he probado y nada, sigo con el mismo problema no se si hay que hacer algo aparte. Tambien probe crear una carpeta compartida en otro servidor e hice las pruebas localmente con exito pero cuando procedi con el servidor paso lo mismo, no veo las rutas, les envio fracmento del codigo :
InputStream inputStream = new BufferedInputStream(new FileInputStream(«c:\\2013\\MAR20141.xls»));
POIFSFileSystem fsFileSystem = new POIFSFileSystem(inputStream);
HSSFWorkbook workBook = new HSSFWorkbook(fsFileSystem);
HSSFSheet hssfSheet = workBook.getSheetAt(0);
Iterator rowIterator = hssfSheet.rowIterator();
les gradeceria si alguien me ayuda
buenas alguien podria decirme como limpiar los datos de una hoja de excel
quien me puede ayudar??????
resulta que me gustaria clonar o copiar una hoja de excel de un libro con formulas imagenes y colores a otro libro de excel mi idea es que cuando uno cree una hoja nueva ya te la haga con el formato copiado
realmente apreciaria su ayuda muchas gracias