将信息附加到现有Excel文件时发生java.lang.NullPointerException
我试图将信息附加到现有的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的内容。我不确定它代表什么,但它确实看起来不是空的。将信息附加到现有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
我不能说我对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());
}