2010-08-31 44 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