2012-03-11 20 views
5

Estoy creando un archivo de Excel usando jxl. Al principio, debe contener solo algunos formatos e información sobre estilos. Luego, debe actualizarse cada vez que alguien le agregue nuevos datos.Agregar datos a un archivo de Excel usando jxl

public class WriteExcel { 

    private static WritableWorkbook workbook; 
    private static WritableCellFormat timesStandard; 
    private String inputFile; 
    final private static int FONT_SIZE = 12; 


    public void setOutputFile(String inputFile) { 
     this.inputFile = inputFile; 
    } 

    private void prepareSheet(WritableSheet sheet) throws WriteException { 
     sheet.mergeCells(0, 0, 1, 0); 
     sheet.mergeCells(3, 0, 4, 0); 
     sheet.mergeCells(6, 0, 7, 0); 

     WritableFont times12pt = new WritableFont(WritableFont.TIMES, FONT_SIZE); 
     timesStandard = new WritableCellFormat(times12pt); 

     CellView cv = new CellView(); 
     cv.setFormat(timesStandard); 
    } 

    public void write() throws IOException, WriteException { 
     File file = new File(inputFile); 
     WorkbookSettings wbSettings = new WorkbookSettings(); 
     wbSettings.setLocale(new Locale("en", "EN"));  

     WritableWorkbook workbook = Workbook.createWorkbook(file, wbSettings); 
     workbook.createSheet("First", 0); 
     WritableSheet excelSheet = workbook.getSheet(0); 
     prepareSheet(excelSheet); 

     workbook.write(); 
     workbook.close(); 
    } 

    public static void main(String[] args) throws WriteException, IOException { 
     WriteExcel test = new WriteExcel(); 
     test.setOutputFile("c:/Users/H/Desktop/test.xls"); 
     test.write(); 
    } 
} 

entiendo que necesito otra clase que me deja acceder al archivo y añadir algunos datos en ella:

class Modify { 

    private static Logger logger = Logger.getLogger(Modify.class); 
    private File inputWorkbook; 
    private File outputWorkbook; 

    public Modify(String input, String output) { 
     inputWorkbook = new File(input); 
     outputWorkbook = new File(output); 
     logger.info("Input file: " + input); 
     logger.info("Output file: " + output); 
    } 

    public void readWrite() throws IOException, BiffException, WriteException { 
     logger.info("Reading..."); 
     Workbook w1 = Workbook.getWorkbook(inputWorkbook); 

     logger.info("Copying..."); 
     WritableWorkbook w2 = Workbook.createWorkbook(outputWorkbook, w1); 

     if (inputWorkbook.getName().equals("test.xls")) { 
      modify(w2); 
     } 

     w2.write(); 
     w2.close(); 
     logger.info("Done"); 
    } 

    private void modify(WritableWorkbook w) throws WriteException { 
     logger.info("Modifying..."); 

     WritableSheet sheet = w.getSheet("First"); 

     //createContent(sheet); // contains methods responsible for adding data, for example: 
     addNumber(sheet, cols, rows, 2); 

    private static void addNumber(WritableSheet sheet, int column, int row, double d) throws WriteException, RowsExceededException { 
     Number number; 
     number = new Number(column, row, d, timesStandard); 
     sheet.addCell(number); 

    } 
} 

Pero termino con un blanco de Excel file con las celdas combinadas.

¿Cómo presento las modificaciones?

+1

no tengo una solución justa la recomendación para cambiar a [Apache POI] (http://poi.apache.org/). – Kai

+1

Son solo operaciones básicas, jxl debería estar bien. – Hurdler

Respuesta

0

Puesto que usted está manipulando un objeto WritableWorkbook que no es un miembro de su clase para w2, no debe usted tener su método de modify() no será nula, sino que devuelve un WritableWorkbook?

Según lo veo, se instancia una nueva cuando llama al modify() pero todos los cambios al final se eliminan debido al alcance.

Al final obtendrá algo así como

private WritableWorkbook modify(WritableWorkbook w) throws WriteException { 
    logger.info("Modifying..."); 

    WritableSheet sheet = w.getSheet("First"); 

    //createContent(sheet); // contains methods responsible for adding data, for example: 
    addNumber(sheet, cols, rows, 2); 
    return sheet; 
    } 

bastante básicamente. Y una modificación similar para addNumber también parece estar en orden. Entonces las llamadas respectivas serían sheet = addNumber(sheet, cols, rows, 2); y w2 = modify(w2);

0

Cómo leer y escribir archivos de Excel en Java utilizando JExcel API. Primero, paso a paso, necesitamos crear un libro de Excel y el siguiente paso es crear hojas y agregar contenido a la hoja.

WritableWorkbook writableWorkbook = null; 
writableWorkbook = Workbook.createWorkbook(new File("WebSparrow.xls")); 
Workbook wb = null; 
wb = Workbook.getWorkbook(new File("WebSparrow.xls")); 

cheque el ejemplo completo http://www.websparrow.org/tutorials/java/how-to-read-and-write-excel-file-in-java

Cuestiones relacionadas