2009-02-06 40 views
23

Estoy interesado y me gustaría obtener más información sobre Java, cómo escribir en las hojas de Excel existentes/manipular los datos existentes. Me preguntaba si podría darme una idea sobre cómo editar un archivo de Excel existente y guardarlo usando la API jxl/Apache POI o tal vez me proporcione un programa de ejemplo sobre cómo editar algunos datos en un archivo existente de Excel y luego guardarlo es Gracias de antemano!Editar archivos de Excel existentes usando jxl api/Apache POI

Respuesta

31

Los tutoriales here son muy útiles y están bien escritos. Usan un JAR externo desarrollado por el proyecto POI de Apache. He aquí un ejemplo simple de una célula de edición:

InputStream inp = new FileInputStream("wb.xls"); 
    Workbook wb = WorkbookFactory.create(inp); 
    Sheet sheet = wb.getSheetAt([sheet index]); 
    Row row = sheet.getRow([row index]); 
    Cell cell = row.getCell([cell index]); 
    String cellContents = cell.getStringCellValue(); 
    //Modify the cellContents here 
    // Write the output to a file 
    cell.setCellValue(cellContents); 
    FileOutputStream fileOut = new FileOutputStream("wb.xls"); 
    wb.write(fileOut); 
    fileOut.close(); 

creo que sirve

+0

¿En qué punto cierras FileInputStream? Si intenta leer desde que se cierra la secuencia de salida, ¿reflejará todos los cambios? Y, ¿no debería abrir FileOutputStream en el modo de adición? –

+0

@eqbridges Como descubrí, InputStream está cerrado por defecto en el constructor. (Sé que su comentario tiene más de un año, pero puede ser que ayude a otros) –

2

Hola tengo el mismo problema que Nexgen. Pero, curiosamente, si abro el archivo con OpenOffice, ¡funciona!

Editar: tal vez he encontrado una solución, poner esto después de cambiar los valores:

HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook); 
3

que refrescar las fórmulas con otra ficha para este uso el siguiente frase

HSSFSheet worksheetse = workbook.getSheetAt(0); 
worksheetse.setForceFormulaRecalculation(true); 

pero es NECESARIO que aplique el método setForceFormulaRecalculation para todas las pestañas que tienen las fórmulas.

Lo siento por mi Inglés

+0

Tenga en cuenta que 'HSSFFormulaEvaluator.evaluateAllFormulaCells (workbook);' puede no funcionar si la hoja de cálculo utiliza tipos específicos de funciones (con n argumentos, que no está implementado en poi). Sin embargo, 'worksheetse.setForceFormulaRecalculation (true);' parece funcionar en este caso. –

+0

@VassilenDontchev Puede dar algunos ejemplos para mostrar en qué casos 'HSSFFormulaEvaluator.evaluateAllFormulaCells (workbook);' fallará – SpringLearner

5

Un consejo muy importante que he aprendido de la manera difícil. Abra OutputStream solo después de haber completado la escritura en su libro de Excel. El ejemplo de Zabbala es perfecto y lo muestra correctamente. Si abre el OutputStream más temprano, sus cambios no se escribirán en el archivo después de que se cierre el programa y se estaría rascando la cabeza como lo hice.

Cuestiones relacionadas