我想知道java中是否有办法编辑excel文件。例如:如果我填充了一个 Excel 表,我可以更改某些单元格的值而保留其他单元格的值吗?先感谢您
6 回答
我对 Apache POI 库有一些不错的结果:http: //poi.apache.org/
它甚至可以在 Android 上运行。
JXL
旨在提高读取效率(因为这是 API 的主要用途)。为了提高性能,与输出信息相关的数据(例如,所有格式信息,如字体)在读取电子表格时不会被解释,因为在询问原始数据值时这是多余的。
但是,如果我们需要修改此电子表格,则需要各种写入接口的句柄,可以使用 copy 方法获得。
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 的JExcel库很好地做到这一点。
是的,您可以使用Apache POI API 编辑 Excel 工作表
使用可以使用 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);
您必须编写一些实用程序来执行此操作,但是可以在 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。