2016-02-26 85 views
0

我想從模板中加載一個excel文件(xls),設置一個單元格的值並將其寫入另一個文件。但我得到這個異常:用apache poi編寫excel文件時發生NullPointerException

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:

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

那麼會導致這個問題呢?

+2

您使用的是什麼版本的Apache POI?如果它不是最新的,升級時會發生什麼? – Gagravarr

+0

調用getDate()時,reportMock返回什麼? – Frank

+0

轉到FilteringDirectoryNode.java:193(您需要POI版本的源代碼),並且可能會找到有用的信息 – idelvall

回答

0

我發現問題:我把模板在excel中打開。所以,只要我關閉模板文件優秀的工作一切正常 - 很奇怪是不是?

相關問題