将信息附加到现有Excel文件时发生java.lang.NullPointerException

将信息附加到现有Excel文件时发生java.lang.NullPointerException,java,excel,exception,excel-2003,jxl,Java,Excel,Exception,Excel 2003,Jxl,我试图将信息附加到现有的Excel文件中,但我一直收到java.lang.NullPointerException。请参阅下面的代码和异常消息 代码: 呼叫代码: 异常消息: 线程主java.lang.NullPointerException中出现异常 位于jxl.write.biff.Styles.getFormatStyles.java:214 在jxl.write.biff.CellValue.addCellFormatCellValue.java:468 位于jxl.write.biff

我试图将信息附加到现有的Excel文件中,但我一直收到java.lang.NullPointerException。请参阅下面的代码和异常消息

代码:

呼叫代码:

异常消息:

线程主java.lang.NullPointerException中出现异常 位于jxl.write.biff.Styles.getFormatStyles.java:214 在jxl.write.biff.CellValue.addCellFormatCellValue.java:468 位于jxl.write.biff.CellValue.setCellDetailsCellValue.java:282 位于jxl.write.biff.LabelRecord.setCellDetailsLabelRecord.java:216 位于jxl.write.biff.WritableSheetImpl.addCellWritableSheetImpl.java:1199 在ExcelOperations.WriteToDocExcelOperations.java:149 在ChequeImage.mainChequeImage.java:174

注意:异常似乎发生在appendingSheet.addCelllabel;行

谢谢你的帮助

编辑1:下图显示了执行appendingSheet.addCelllabel之前appendingSheet的内容。我不确定它代表什么,但它确实看起来不是空的。
我不能说我对Biff很熟悉,但POI似乎也以类似的方式工作。看起来您已经创建了一个工作簿:

WritableWorkbook copy=Workbook.createWorkbookNewFileOutput.xls,appendingWorkbook

但是,您不会创建引用的图纸:

appendingSheet=copy.getsheetsheetsheet 1


我猜你得到NPE是因为copy.getSheetSheetSheet 1;正在返回null。与仅在excel中打开工作簿不同,API可能不会为您创建默认工作表。我敢打赌,在添加单元格之前,您必须先创建sheet对象。

所以……我已经设法解决了这个问题

我无法解释原因,但在我重新定义了copy和appendingWorkbook之后,并没有将Sheet作为全局变量而不是本地变量附加到AppendToDoc;除了添加了copy.write这一行外,该程序还可以运行


谢谢大家的帮助。我真的很感激

在使用jxlapi将数据写入XLS文件时,我遇到了以下异常

Exception in thread "main" java.lang.NullPointerException
    at jxl.write.biff.Styles.getFormat(Styles.java:214)
    at jxl.write.biff.CellValue.addCellFormat(CellValue.java:468)
    at jxl.write.biff.CellValue.setCellDetails(CellValue.java:282)
    at jxl.write.biff.LabelRecord.setCellDetails(LabelRecord.java:216)
    at jxl.write.biff.WritableSheetImpl.addCell(WritableSheetImpl.java:1199)
    at com.java.report.XLS_JXLReport.main(XLS_JXLReport.java:31)
由于WritableFont为空,我观察到发生以下错误。引发异常的源代码是:

Styles.java:214
    // Do the same with the statically shared fonts
    if (format.getFont() == WritableWorkbook.ARIAL_10_PT) // Line 214
    {
      format.setFont(getArial10Pt());
    }
要避免此错误,请确保提供字体名称

使用

公共类XLS\U JXLReport{ 静态字符串filePath=C:/Yash/; 公共静态无效主字符串[]args引发IOException、JxException{ //使用给定的文件名创建可写工作簿 jxl.write.WritableWorkbook工作簿=jxl.workbook.createWorkbooknew FilePath+CopyCell.xls; WritableSheet sheet=工作簿.createSheetMy sheet,0; //创建单元格字体和格式 WritableFont cellFont=new jxl.write.WritableFontWritableFont.TIMES,16; cellFont.setcolorjxl.format.color.BLUE; WritableCellFormat cellFormat=新的WritableCellFormatcellFont; cellFormat.setBackgroundjxl.format.Color.GRAY_25; //cellFormat=null;//获取Styles.java:214处的NullPointerException。取消对这行代码的注释。 //创建标签,指定内容和格式 标签标签=新标签1、2、ABCD、单元格格式; sheet.addCelllabel; //在循环中创建单元格的副本 WritableCell copiedCell=null; 对于int i=0;i<4;i++{ copiedCell=label.copyTo1,4+i;//深度复制单元格 sheet.addCellcopiedCell; } 封闭式工作簿; } 公共静态无效closeWorkbookWritableWorkbook工作簿引发IOException、JXleException{ 如果工作簿==null 回来 如果workbook.getNumberOfSheets==0{ 工作簿.createSheetNo数据,0;//否则指针错误 } //以Excel格式写出此工作簿中的数据 练习册。写作; //关闭并释放分配的内存 工作簿.close; } } JXL API允许用户在运行时读取、写入、创建和修改Excel.xls工作簿中的工作表。它不支持.xlsx格式

jxlapi支持excel95、97、2000、XP和2003版本的Excel文档。这些文档包含扩展名.xls 对于.xlsx使用。
那么,appendingSheet实例将在AppendToDoc方法中初始化,并且仅限于该方法。导致WriteToDoc作为appendingSheet的NPE为空。同时显示调用这些方法的代码会很有帮助。@Smit appendingSheet是一个全局变量。即使已在AppendToDoc中初始化,即使AppendToDoc完成否,该值仍将存在?@Jonathan Drapeau我将立即使用调用方法编辑我的问题。appendingSheet=copy.GetSheetSheet1;getSheet不是返回null吗?请查看我的编辑1。谢谢。你确定这不是无效的或不恰当的吗 是否在应用程序中表示格式不正确的数据?在appendingSheet=copy.getsheetsheetsheet1之后,可以尝试System.out.println;查看返回的工作表是否为空或数据不正确。
Exception in thread "main" java.lang.NullPointerException
    at jxl.write.biff.Styles.getFormat(Styles.java:214)
    at jxl.write.biff.CellValue.addCellFormat(CellValue.java:468)
    at jxl.write.biff.CellValue.setCellDetails(CellValue.java:282)
    at jxl.write.biff.LabelRecord.setCellDetails(LabelRecord.java:216)
    at jxl.write.biff.WritableSheetImpl.addCell(WritableSheetImpl.java:1199)
    at com.java.report.XLS_JXLReport.main(XLS_JXLReport.java:31)
Styles.java:214
    // Do the same with the statically shared fonts
    if (format.getFont() == WritableWorkbook.ARIAL_10_PT) // Line 214
    {
      format.setFont(getArial10Pt());
    }