在 Java 中使用 JXL 复制工作表
我想将现有 XLS 文档中的一张工作表复制到新文档的新位置。
我怎样才能用 JXL 做到这一点?
Workbook w1 = Workbook.getWorkbook(new File("ExistingDocument.xls"), settings);
WritableWorkbook w2 = Workbook.createWorkbook(new File("NewDocument.xls"));
/* So here, I would like copy the first sheet from w1 to the second sheet of w2 ... */
w2.write();
w2.close();
w1.close();
编辑:
w1.getSheet(0).getCell(0, 0)
不是 WritableCell
,因此我无法使用 copyTo
方法。< br>
有没有办法将单元格/工作表从 w1
添加到 w2
工作簿?
编辑2:
那么我是否必须创建工作簿到其他文件的可写副本?
(edit3:或者是否有其他免费库可以做到这一点?)
更新:
当我运行此代码时,我得到 jxl.common.AssertionFailed
在线异常
WritableCellFormat newFormat = new WritableCellFormat(readFormat);
如果我删除此行并将代码更改为
newCell.setCellFormat(readFormat);
则不会复制单元格样式(字体、单元格边界等)。
try {
Workbook sourceDocument = Workbook.getWorkbook(new File("C:\\source.xls"));
WritableWorkbook writableTempSource = Workbook.createWorkbook(new File("C:\\temp.xls"), sourceDocument);
WritableWorkbook copyDocument = Workbook.createWorkbook(new File("C:\\copy.xls"));
WritableSheet sourceSheet = writableTempSource.getSheet(0);
WritableSheet targetSheet = copyDocument.createSheet("sheet 1", 0);
for (int row = 0; row < sourceSheet.getRows(); row++) {
for (int col = 0; col < sourceSheet.getColumns(); col++) {
WritableCell readCell = sourceSheet.getWritableCell(col, row);
WritableCell newCell = readCell.copyTo(col, row);
CellFormat readFormat = readCell.getCellFormat();
/* exception on the following line */
WritableCellFormat newFormat = new WritableCellFormat(readFormat);
newCell.setCellFormat(newFormat);
targetSheet.addCell(newCell);
}
}
copyDocument.write();
copyDocument.close();
writableTempSource.close();
sourceDocument.close();
} catch (Exception e) {
e.printStackTrace();
}
如何将单元格样式也复制到新单元格中?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
如何将一个工作簿中的工作表复制到另一个工作簿中的新工作表?
这可以完成,但需要一些工作。首先,您必须复制它的单元格(在几个嵌套的 for 循环内)。对于每个单元格,您需要调用
copyTo()
方法,这将生成一个深层副本。但是,格式只是浅复制,因此您需要获取单元格格式并使用其复制构造函数,然后对刚刚复制的单元格调用 setCellFormat。然后将重复的单元格添加到新电子表格代码可能如下所示:
资源:
How can I copy a worksheet in one workbook to a new worksheet in another workbook?
This can be done, but requires a little work. Firstly, you have to copy it cell (within a couple of nested for loops). For each cell you need to invoke the
copyTo()
method, which will produce a deep copy. However the format is only shallow copied, so you will need to get the cell format and use the copy constructor of that, and then call setCellFormat on the cell you have just copied. Then add the duplicate cell to the new spreadsheetThe code might look as follows:
Resources :
谨防警告“超出格式记录的最大数量”。使用默认格式。'尝试使用诸如
Map
之类的东西来控制WritableCellFormat
实例的数量。Beware of warning 'Maximum number of format records exceeded. Using default format.' Try use sth like
Map<CellFormat,WritableCellFormat>
to controll number ofWritableCellFormat
instances.只是更新,“copyto”功能不适用于单元格,一些修改后的代码:
这需要一个可读的工作簿、要复制的工作表的索引号、可写的工作簿和需要复制工作表的索引号,非常适合将工作表从一个工作簿复制到另一个工作簿。
Just an update, the "copyto" function does not work with a cell, some modified code:
This takes a readable workbook, index number of the sheet to be copied, the writable workbook and the index number where the sheet needs to be copied, works fine for copying a sheet from one workbook to another.
您必须逐一循环单元格并将它们添加到新工作表中。
请参阅问题“如何将一个工作簿中的工作表复制到另一个工作簿中的新工作表”下的此作业簿?
You have to loop through the cells one by one and add them to the new sheet.
See this, under question How can I copy a worksheet in one workbook to a new worksheet in another workbook?
JXL APIwiki 允许用户读取、写入、在运行时创建和修改 Excel(
.xls
) 工作簿中的工作表。它不支持.xlsx
格式。Excel 95、97、2000、XP 和 2003
版本的 Excel 文档。这些文档的扩展名为.xls
使用以下函数复制 JXL 工作簿表。
使用 Java Excel API » 2.6.12 的完整示例,使用的示例文件是 JXLWorkbook.xls。
JXL APIwiki allows users to read, write, create, and modify sheets in an Excel(
.xls
) workbook at runtime. It doesn't support.xlsx
format.Excel 95, 97, 2000, XP, and 2003
. These documents hold the extension.xls
Use the following function to Copy the JXL Workbook Sheet.
Full length example using Java Excel API » 2.6.12, Sample file used is JXLWorkbook.xls.