使用Java中的JXL复制表

use*_*ser 4 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();
Run Code Online (Sandbox Code Playgroud)

编辑:
w1.getSheet(0).getCell(0, 0)不是WritableCell,所以我无法使用该copyTo方法.
有没有办法从增加小区/片w1w2工作簿?
edit2:
那么我是否必须将工作簿的可写副本创建到另一个文件?
(编辑3:或者还有其他任何可以执行此操作的免费库吗?)


更新:

当我运行此代码时,我会jxl.common.AssertionFailed在线获得异常

WritableCellFormat newFormat = new WritableCellFormat(readFormat);
Run Code Online (Sandbox Code Playgroud)

如果我删除此行并将代码更改为

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();
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能将单元格样式复制到新单元格?

Col*_*ert 7

如何将一个工作簿中的工作表复制到另一个工作簿中的新工作表?

这可以做到,但需要一点工作.首先,你必须复制它的单元格(在几个嵌套的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

资源: