2013-07-04 48 views
2

我使用JexcelJexcel - 更新一個excel與

如Vogella tutorial討論更新現有的Excel工作表嘗試數據。

這裏的問題是已有的數據已經存在於現有的Excel表格中,並且被新編寫的excel數據湮沒了。

例如,如果我在Excel中

<table> 
<tr> 
<td>1</td> <td>2 </td> 
</tr> 
<tr> 
<td>3</td> <td>4 </td> 
</tr> 
<table> 

已經這一點,我希望寫程序執行後,將數據添加到旁邊的2和4的新的細胞,像

<table> 
<tr> 
<td>1</td> <td>2 </td> <td>X </td> 
</tr> 
<tr> 
<td>3</td> <td>4 </td> <td>Y </td> 
</tr> 
<table> 

這是我得到的

<table> 
<tr> 
<td> </td> <td> </td> <td>X </td> 
</tr> 
<tr> 
<td> </td> <td> </td> <td>Y </td> 
</tr> 
<table> 

Label label; 
label = new Label(column, row, s, times); 
sheet.addCell(label); 

這是添加指定的列和行的單元格,但擦除r最好的數據。

如何將數據添加到保存數據的現有excel中?

以下是該程序(參考:Vogella)。 Excel工作表已經有20行數據和 前2列,我試圖在第3列添加20行數據 package excel;

import java.io.File; 
import java.io.IOException; 
import java.util.Locale; 

import jxl.CellView; 
import jxl.Workbook; 
import jxl.WorkbookSettings; 
import jxl.format.UnderlineStyle; 
import jxl.write.Label; 
import jxl.write.WritableCellFormat; 
import jxl.write.WritableFont; 
import jxl.write.WritableSheet; 
import jxl.write.WritableWorkbook; 
import jxl.write.WriteException; 
import jxl.write.biff.RowsExceededException; 

public class WriteExcel { 

    private WritableCellFormat timesBoldUnderline; 
    private WritableCellFormat times; 
    private String inputFile; 

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

    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("Report", 0); 
     WritableSheet excelSheet = workbook.getSheet(0); 
     createLabel(excelSheet); 
     createContent(excelSheet); 

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

    private void createLabel(WritableSheet sheet) throws WriteException { 
     // Lets create a times font 
     WritableFont times10pt = new WritableFont(WritableFont.TIMES, 10); 
     // Define the cell format 
     times = new WritableCellFormat(times10pt); 
     // Lets automatically wrap the cells 
     times.setWrap(true); 

     // Create create a bold font with unterlines 
     WritableFont times10ptBoldUnderline = new WritableFont(
       WritableFont.TIMES, 10, WritableFont.BOLD, false, 
       UnderlineStyle.SINGLE); 
     timesBoldUnderline = new WritableCellFormat(times10ptBoldUnderline); 
     // Lets automatically wrap the cells 
     timesBoldUnderline.setWrap(true); 

     CellView cv = new CellView(); 
     cv.setFormat(times); 
     cv.setFormat(timesBoldUnderline); 
     cv.setAutosize(true); 

    } 

    private void createContent(WritableSheet sheet) throws WriteException, 
      RowsExceededException { 

     Integer salary = 1000; 
     // Now a bit of text 
     for (int i = 0; i < 20; i++) { 
      // third column 
      addLabel(sheet, 2, i, salary.toString()); 

      // WritableCell cell = sheet.getWritableCell(2, i); 
      // if (cell.getType() == CellType.LABEL) { 
      // Label l = (Label) cell; 
      // l.setString("modified cell"); 
      // } 
      salary += 1000; 
     } 

    } 

    private void addLabel(WritableSheet sheet, int column, int row, String s) 
      throws WriteException, RowsExceededException { 
     Label label; 
     label = new Label(column, row, s, times); 
     sheet.addCell(label); 
    } 

    public static void main(String[] args) throws WriteException, IOException { 
     WriteExcel test = new WriteExcel(); 
     test.setOutputFile("c:/temp/lars.xls"); 
     test.write(); 
     System.out 
       .println("Please check the result file under c:/temp/lars.xls "); 
    } 
} 
+0

另一個框架[DataFile](http://datafile.sourceforge.net/)在DataRow上似乎沒有任何API來在特定的單元格(行,列)上添加數據。 – user2527039

+0

您用於創建工作簿的代碼是什麼? –

+0

添加了上面的代碼。請檢查。 – user2527039

回答

0

您正在使用WritableWorkbook創建一個新的可寫作的工作簿,而不是寫上一個。要修改現有的工作簿,你首先必須像下面創建的現有工作簿的東西副本:

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

,然後在副本上工作。有關詳細信息,請參閱(提取api的路徑)\ jexcelapi \ src \ jxl \ demo \ ReadWrite.java或導航到複製和修改this的電子表格頁面。

+0

以下(不幸被拒絕)編輯建議可能在這裏很有用:http://stackoverflow.com/review/suggested-edits/3928864 – palacsint