java jxl

java - Modificando el excel existente usando jxl



(4)

Personalmente uso este código para agregar el archivo xls y crear uno si no existe.
Utilizando jxl 2.6:

public class Excel { private String fileName = "excel_file.xls"; private String sheetName = "sheet1"; private WritableWorkbook writableWorkbook; private int rowCount; private Workbook wb; // assigns checks if file exists or not, both cases we assign it to a WritableWorkbook // object so that we can write to it. private void assignWorkBook() throws IOException, BiffException { // File f = new File(System.getProperty("user.dir") +"//"+fileName); File inp = new File(fileName); try{ wb = Workbook.getWorkbook(inp); writableWorkbook = Workbook.createWorkbook(inp, wb); } catch (FileNotFoundException e){ writableWorkbook = Workbook.createWorkbook(inp); //Create a new one } } public int getRowCount() { return rowCount; } // this function writes a vector to an excel file, checks if there is already a sheet // with that name or not, and uses it. then we have to close the Workbook object before // we could write to the file, and then we save the file. // That is, the file is always saved after writing to it. public void writeRow(Vector<String> playerVector) throws WriteException, IOException, BiffException { assignWorkBook(); WritableSheet excelSheet; if(writableWorkbook.getNumberOfSheets() == 0) { excelSheet = writableWorkbook.createSheet(sheetName, 0); } else { excelSheet = writableWorkbook.getSheet(sheetName); } rowCount = excelSheet.getRows(); int colCount = 0; for(String playerStat:playerVector) { Label label = new Label(colCount++, rowCount, playerStat); excelSheet.addCell(label); } if(wb != null) { wb.close(); } writableWorkbook.write(); writableWorkbook.close(); //everytime save it. } }

No puedo editar la hoja de Excel existente con jxl. Siempre crea uno nuevo. ¿Alguien por favor me puede ayudar con eso? Por favor dé un pequeño código de muestra.


Sé que esta es una pregunta bastante antigua, pero si alguien encuentra el mismo problema, entonces para conservar el formato correcto (tipo de letra, color, etc.) debe guardar el formato de celda antes de enviarlo a Etiqueta, y luego forzar la Celular al formato anterior. Código:

CellFormat cfm = cell.getCellFormat(); Label l = (Label) cell; l.setString("modified cell"); cell.setCellFormat(cfm);


jxl está diseñado para una mayor eficiencia de lectura (ya que este es el uso principal de la API). Para mejorar el rendimiento, los datos que se relacionan con la información de salida (por ejemplo, toda la información de formato, como las fuentes) no se interpretan cuando se lee la hoja de cálculo, ya que es superflua al interrogar los valores de datos sin procesar.

Sin embargo, si necesitamos modificar esta hoja de cálculo, se necesita un identificador para las diversas interfaces de escritura, que se puede obtener utilizando el método de copia.

Workbook workbook = Workbook.getWorkbook(new File("myfile.xls")); WritableWorkbook copy = Workbook.createWorkbook(new File("temp.xls"), workbook);

Esto copia la información que ya se ha leído y realiza el procesamiento adicional para interpretar los campos necesarios para escribir hojas de cálculo. La desventaja de esta estrategia de lectura optimizada es que tenemos dos hojas de cálculo en la memoria en lugar de solo una, por lo que duplicamos los requisitos de la memoria.

Pero después de esto, puedes hacer lo que quieras. Me gusta:

WritableSheet sheet2 = copy.getSheet(1); WritableCell cell = sheet2.getWritableCell(1, 2); if (cell.getType() == CellType.LABEL) { Label l = (Label) cell; l.setString("modified cell"); } copy.write(); copy.close(); workbook.close();

Nota: esto se toma directamente de la página tutorial de Andy Khan .


//there is god example of it, you can copy in ur project and check it out, to //understand how it works Workbook wk = Workbook.getWorkbook(new File("ex.xls")); // WritableWorkbook wkr = Workbook.createWorkbook(new File("modifed.xls"), wk); /* second line makes copy of wk excel file object /creates a readable spreadsheet. both are now similar and i can Modify exiting wkr spreadsheets */ //next 2 line retrieve sheet number 0 and cell (1,1) WritableSheet getsht = wkr.getSheet(0); WritableCell getcl = getsht.getWritableCell(1, 1); //making own font WritableFont ft = new WritableFont(WritableFont.ARIAL, 20 , WritableFont.BOLD, true , UnderlineStyle.SINGLE); //making Format, which uses font WritableCellFormat form = new WritableCellFormat( ft); Number nb = ( Number ) getcl ; nb.setCellFormat( form ); wkr.write(); wkr.close();