7

我正在处理一些相当复杂的 excel 文件,但在复制工作表时遇到了问题。每当我尝试复制不是完全空白的工作表时,我都会收到以下消息:

Exception in thread "main" java.lang.NullPointerException
     at jxl.write.biff.WritableSheetCopier.shallowCopyCells(WritableSheetCopier.java:499)
     at jxl.write.biff.WritableSheetCopier.copySheet(WritableSheetCopier.java:239)
     at jxl.write.biff.WritableSheetImpl.copy(WritableSheetImpl.java:1622)
     at jxl.write.biff.WritableWorkbookImpl.copySheet(WritableWorkbookImpl.java:987)
     at excelCalc.main(excelCalc.java:18)

我想知道这里的问题是什么。如果不能将“.copySheet(”函数用于其中包含信息的工作表,为什么还会有它。为了以更简单的规模重现问题,我创建了您在下面看到的代码。我期望的输出看到的是两张相同的表,其中单元格(0,0)的标签为“test”。一张名为“Flows”,另一张名为“copy”。关于为什么给出这个空指针的任何想法?

import java.io.File;

import jxl.*;
import jxl.write.*;

public class excelCalc
{
    public static void main(String[] args) throws Exception
    {
        WritableWorkbook outputBook = Workbook.createWorkbook(new File("C:/Users/Kevin Brey/CS243/ExcelTest/files/output", "output.xls"));

        WritableSheet rSheet = outputBook.createSheet("Flows", 0);

        rSheet.addCell(new Label(0, 0, "test"));
        outputBook.copySheet(0, "copy", 0);
        outputBook.write();
        outputBook.close();
    }
}

编辑:这段代码也给出了同样的例外:

import java.io.File;

import jxl.*;
import jxl.write.*;

public class excelCalc
{
    public static void main(String[] args) throws Exception
    {
        WritableWorkbook outputBook = Workbook.createWorkbook(new File("C:/Users/Kevin Brey/CS243/ExcelTest/files/output", "output.xls"));

        WritableSheet sheet1 = outputBook.createSheet("Sheet1", 0);
        WritableSheet sheet2 = outputBook.createSheet("Sheet2", 1);

        sheet1.addCell(new Label(0, 0, "Label1"));
        sheet2.addCell(new Label(0, 0, "Label2"));

        outputBook.copySheet(0, "Copy", 1);

        outputBook.write();
        outputBook.close();
    }
}

我对可能出错的一个想法是,由于工作表已打开且已被编辑,因此无法复制。我真的不知道如何解决这个问题。

4

2 回答 2

10

这是 jxl-2.6.12.jar 中的一个错误,请改用 jxl-2.6.10.jar。

细节:

将 '&&' 拼写成 '&'

WritableSheetCopier.java 中的第 493 行 - 第 504 行

if (c != null)
          {
            toSheet.addCell(c);

            // Cell.setCellFeatures short circuits when the cell is copied,
            // so make sure the copy logic handles the validated cells        
            if (c.getCellFeatures() != null &
                c.getCellFeatures().hasDataValidation())
            {
              validatedCells.add(c);
            }
          }

WritableSheetCopier.java 中的第 540 行 - 第 551 行

if (c != null)
          {
            toSheet.addCell(c);

            // Cell.setCellFeatures short circuits when the cell is copied,
            // so make sure the copy logic handles the validated cells        
            if (c.getCellFeatures() != null &
                c.getCellFeatures().hasDataValidation())
            {
              validatedCells.add(c);
            } 
          }

SheetCopier.java 中的第 990 行 - 第 1001 行

if (c != null)
          {
            toSheet.addCell(c);

            // Cell.setCellFeatures short circuits when the cell is copied,
            // so make sure the copy logic handles the validated cells
            if (c.getCellFeatures() != null &
                c.getCellFeatures().hasDataValidation())
            {
              validatedCells.add(c);
            }
          }
于 2012-04-11T05:51:48.840 回答
0

复制表为空,复制前添加一些单元格到复制表

于 2012-03-31T21:45:04.283 回答