Java,修改文件excel

时间:2012-09-25 09:55:51

标签: java excel

我想知道java中是否有办法编辑excel文件。 例如:如果我填充了excel表,我可以更改某些单元格的值,同时保留其他单元格的值? 提前谢谢

6 个答案:

答案 0 :(得分:4)

我对Apache POI库有一些不错的结果:http://poi.apache.org/

它甚至适用于Android。

答案 1 :(得分:3)

是的,你可以使用Andy Khan的JExcel库很好地完成它。

答案 2 :(得分:3)

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

答案 3 :(得分:1)

是的,您可以使用Apache POI API编辑Excel工作表

答案 4 :(得分:0)

使用可以使用JXL来执行此操作

JXL并没有提供直接读取和写入同一文件的方式(对您来说可能看起来不方便,但JXL说这是因为读取是主要功能(主要使用)并且这会提高性能,我会更喜欢我自己在工作簿上读写了一个威胁)

示例

import java.io.File; 
import java.util.Date; 
import jxl.*; 
import jxl.write.*; 

//open read to your workbook (readonly)
Workbook workbook = Workbook.getWorkbook(new File("myfile.xls"));

//create a copy workbook on which you will write
WritableWorkbook copy = Workbook.createWorkbook(new File("output.xls"), workbook);

//modify existing cell 
WritableSheet sheet2 = copy.getSheet(1); 
WritableCell cell = sheet2.getWritableCell(2, 4); 

NumberFormat fivedps = new NumberFormat("#.#####"); 
WritableCellFormat cellFormat = new WritableCellFormat(fivedps); 
cell.setFormat(cellFormat);

//add cells 
Label label = new Label(0, 2, "New label record"); 
sheet2.addCell(label); 

Number number = new Number(3, 4, 3.1459); 
sheet2.addCell(number);

答案 5 :(得分:0)

您必须编写一些实用程序才能执行此操作,但可以在JXL中执行此操作。

请注意SheetCopier.java,L996 + 997中存在错误: 错误:

    if (c.getCellFeatures() != null &
        c.getCellFeatures().hasDataValidation())

应该是:

    if (c.getCellFeatures() != null &&
        c.getCellFeatures().hasDataValidation())

由于我没有Andy Khans的电子邮件,所以我无法联系他,所以也要重建消息来源。

作为旁注,Apache poi对于凡人来说太复杂了,而且类名是荒谬的,根据我的经验,apache代码是不友好的,无益的,并且不健壮。所以我尽可能避免使用apache。