2012-03-11 27 views
5

我使用jxl創建了一個excel文件。首先應該只包含一些關於樣式的格式和信息。然後,每次有人向其添加新數據時都應該更新它。使用jxl將數據添加到Excel文件

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(); 
    } 
} 

我明白,我需要另一個類,將讓我訪問文件和一些數據添加到它:

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); 

    } 
} 

但我結束了一個空白Excel只合並單元格文件。

如何引入修改?

+1

我沒有一個解決方案只是切換到[Apache的POI(http://poi.apache.org/)的建議。 – Kai 2012-03-11 21:28:50

+1

這只是基本操作,jxl應該沒問題。 – Hurdler 2012-03-11 21:35:11

回答

0

既然你操縱WritableWorkbook對象,它是不是你的類w2的一員,不應該你有你的modify()方法並不作廢,而是返回WritableWorkbook

正如我所看到的,當您撥打modify()時,會發現一個新的變化,但由於範圍的原因,最後所有更改都會被刪除。

在最後,你會得到這樣的

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; 
    } 

很基本。對於addNumber也進行了類似的修改。 然後,相應的調用將是sheet = addNumber(sheet, cols, rows, 2);w2 = modify(w2);

0

如何使用JExcel API在Java中讀寫Excel文件。首先,我們需要創建一個excel工作簿,然後創建工作表並向工作表添加內容。

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

檢查完整的例子http://www.websparrow.org/tutorials/java/how-to-read-and-write-excel-file-in-java