Java,修改excel文件
我想知道java中是否有编辑excel文件的方法。 例如:如果填充了excel工作表,我可以更改某些单元格的值,而保留其他单元格的值?Java,修改excel文件,java,excel,Java,Excel,我想知道java中是否有编辑excel文件的方法。 例如:如果填充了excel工作表,我可以更改某些单元格的值,而保留其他单元格的值? 提前感谢您是的,您可以使用Andy Khan的库很好地完成这项工作。是的,您可以使用API编辑excel工作表我对Apache POI库有一些不错的结果: 它甚至可以在Android上运行。JXL是为提高读取效率而设计的(因为这是API的主要用途)。为了提高性能,在读取电子表格时不解释与输出信息(例如,字体等所有格式信息)相关的数据,因为这在查询原始数据值时是多
提前感谢您是的,您可以使用Andy Khan的库很好地完成这项工作。是的,您可以使用API编辑excel工作表我对Apache POI库有一些不错的结果:
它甚至可以在Android上运行。
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();
可以使用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())
由于我没有安迪·坎斯的电子邮件,我无法联系他,所以也要重建来源
顺便说一句,ApachePOI对于凡人来说太复杂了,类名也很荒谬,以我的经验,Apache代码不友好、没有帮助,而且不健壮。因此,我尽可能避免使用apache。请从此问题中删除itext标记。iText没有任何XLS功能。您尝试过什么?你在用图书馆吗?哪一个?发布一些代码片段,说明您对它做了一些研究。您能给我举个简单的例子吗?请:)来吧,伙计。至少看看文件,试试安迪给你的东西。除了抱怨之外,您还需要付出一些努力。@duffymo那个API不是过时了吗?你知道它也适用于2003年之后发布的产品吗?Apache POI确实很方便。在itext中,我可以这样做吗?坦率地说,我使用itext for pdf,但我用JXLI完美地做到了这一点。我知道这已经有半年了,但受到你在头版上关于你的帐户被锁定的帖子的启发,我需要让您知道,这段代码会像编写的一样正常工作。根据语言规范,如果按位运算符的输入是布尔的,则结果是布尔运算。这应该可以很好地工作。@John,很明显,&“计算两个部分,&&&”使用惰性计算。如果c.getCellFeatures()==null,则带&的表达式将中断,因为“c.getCellFeatures().hasDataValidation()”也将被计算,导致NPE不是预期的结果,否则代码部分“c.getCellFeatures()!=null”将不再需要。我只想说jxl是一个非常好用的库,比ApachePOI更简单,所以要快速启动并运行程序,应该使用jxl。然而,ApachePOI支持较新的excel,但在原型阶段,您将被其复杂性所困扰。谢谢你的解释!
if (c.getCellFeatures() != null &&
c.getCellFeatures().hasDataValidation())