在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
方法。
有什么方法可以w1
向w2
工作簿添加单元格/ 工作表吗?
那么我是否必须将工作簿的可写副本创建到另一个文件?
( 或者还有其他免费的lib可以做到这一点吗?)
当我运行此代码时,我会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();
}
如何将单元格样式也复制到新单元格?
回答:
可以完成,但是需要一些工作。首先,您必须复制它的单元格(在几个嵌套的for循环内)。对于每个单元格,您都需要调用copyTo()
方法,这将产生一个深层副本。但是,格式仅是浅表复制,因此您将需要获取单元格格式并使用该格式的复制构造函数,然后在刚复制的单元格上调用setCellFormat。然后将重复的单元格添加到新的电子表格
for (int i = 0 ; i < numrows ; i++){ for (int j = 0 ; j < numcols ; j++){
readCell = sheet.getCell(i, j);
newCell = readCell.copyTo(i, j);
readFormat = readCell.getCellFormat();
newFormat = new WritableCellFormat(readFormat);
newCell.setCellFormat(newFormat);
newSheet.add(newCell);
}
}
- JExcel API常见问题
以上是 在Java中使用JXL复制工作表 的全部内容, 来源链接: utcz.com/qa/418466.html