2010-08-31 74 views

回答

22

jxl旨在提高讀取效率(因爲這是API的主要用途)。爲了提高性能,在讀取電子表格時,不會解釋與輸出信息有關的數據(例如所有格式化信息,如字體),因爲在查詢原始數據值時這是多餘的。

但是,如果我們需要修改此電子表格,則需要使用複製方法獲取各種寫入接口的句柄。

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

這複製已經讀入的信息,並執行附加處理來解釋寫入電子表格所必需的字段。這種讀取優化策略的缺點是我們有兩個電子表格保存在內存中,而不是一個,因此內存需求加倍。

但之後,你可以做任何你想做的事情。像:

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

注意:這是直接從Andy Khan's tutorial page

+0

嗨@Lalli我使用你的答案,但它不工作 我在這一行'將WritableWorkbook複製= Workbook.createWorkbook(新文件(「temp.xls」)得到錯誤,工作簿);' 錯誤是'java.io.FileNotFoundException:temp.xls:打開失敗:EROFS(只讀文件系統)' – 2016-09-15 06:38:24

0

我知道這是一個相當古老的問題,但如果任何人會遇到同樣的問題,然後保留正確的格式(字體類型,着色等) 您應該保存單元格格式,然後將其轉換爲標籤,然後強制單元格到以前的格式。 代碼:

CellFormat cfm = cell.getCellFormat(); 
Label l = (Label) cell; 
l.setString("modified cell"); 
cell.setCellFormat(cfm); 
0
//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(); 
+0

儘管有時只用代碼回答問題是可以的,但大部分時間通過添加解釋來改進該帖子。您可以編輯您的答案以包含一個答案。 – 2014-12-04 13:05:31