繁体   English   中英

使用Apache POI写入Excel文件时发生NullPointerException

[英]NullPointerException on writing excel file with apache poi

我正在尝试从模板加载Excel文件(xls),设置一个单元格的值并将其写入另一个文件。 但我得到这个例外:

java.lang.NullPointerException
    at org.apache.poi.poifs.filesystem.FilteringDirectoryNode$FilteringIterator.<init>(FilteringDirectoryNode.java:193)
    at org.apache.poi.poifs.filesystem.FilteringDirectoryNode$FilteringIterator.<init>(FilteringDirectoryNode.java:188)
    at org.apache.poi.poifs.filesystem.FilteringDirectoryNode.getEntries(FilteringDirectoryNode.java:101)
    at org.apache.poi.poifs.filesystem.FilteringDirectoryNode.iterator(FilteringDirectoryNode.java:105)
    at org.apache.poi.poifs.filesystem.EntryUtils.copyNodes(EntryUtils.java:74)
    at org.apache.poi.poifs.filesystem.EntryUtils.copyNodes(EntryUtils.java:90)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:1395)
    at de.ajs.dailyreport.runtime.services.WorkDiaryExcel.write(WorkDiaryExcel.java:37)
    at de.ajs.dailyreport.runtime.services.WorkDiaryExcelTest.someTest(WorkDiaryExcelTest.java:35)
    ...

(顺便说一句很糟糕的消息;-)

这是代码:

public class WorkDiaryExcel {

    private final Report report;

    /**
     * row, cell for date
     */
    private static final int[] DATE_FIELD = new int[] { 7, 7 };
    private HSSFWorkbook excel;

    public WorkDiaryExcel(Report report) {
        this.report = report;
        try(HSSFWorkbook excel = new HSSFWorkbook(WorkDiaryExcel.class.getResourceAsStream("/template.xls"))) {
            this.excel = excel;
            HSSFSheet sheet = excel.getSheetAt(0);
            sheet.getRow(DATE_FIELD[0]).getCell(DATE_FIELD[1]).setCellValue(report.getDate());
        } catch (IOException e) {
            throw new IllegalStateException("Problem on loading excel from template: ", e);
        }

    }

    public void write(OutputStream out){
        try {
            excel.write(out);
            out.flush();
            out.close();
        } catch (IOException e) {
            throw new IllegalArgumentException("Problem on writing excel to output stream: ", e);
        }
    }

}

此代码从测试中调用:

@Test
public void someTest() throws IOException {
    WorkDiaryExcel to = new WorkDiaryExcel(reportMock);
    FileOutputStream out = new FileOutputStream("out.xls");
    to.write(out);
}

那么什么会引起问题呢?

我发现了问题:我在excel中打开了模板。 所以,一旦我用模板文件关闭excel,一切都正常工作-很奇怪不是吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM