2016-11-15 19 views
0

我的web應用程序中存在嚴重問題。我正在使用POI api通過java代碼寫入excel。使用JAVA創建Excel文件:工作簿中已經包含一個這個名字的表格

使用Java Main方法(僅工作一次)運行正常。但是,當我嘗試再次執行我的應用程序有以下異常:下面我的代碼的

Message: The workbook already contains a sheet of this name 
StackTrace: java.lang.IllegalArgumentException: 
The workbook already contains a sheet of this name 
at org.apache.poi.xssf.usermodel.XSSFWorkbook.createSheet(XSSFWorkbook.java:767) 
at org.apache.poi.xssf.usermodel.XSSFWorkbook.createSheet(XSSFWorkbook.java:108) 

關注部分:

public class ReportGenerator { 

    private Workbook wb = new XSSFWorkbook(); 

    public void generateReport(Map<String, Node> nodes, 
String reportOption) throws Exception {  

    this.FILENAME = getFilePath(DIRECTORY_TEMPORARY_REPORT); 
    export(FILENAME); 
    new Chart(FILENAME, this.reportOption); 
    wb.close(); 
    } 

    //export data to excel file 
    public void export(String pathname) throws IOException, ParseException { 

    if(this.reportOption.equals("MGWSCC")){  
     exportMgwTop(); 
     exportMgwMethodology(); 
     exportRelease(); 
    }else if(this.reportOption.equals("MSCSCC")){ 
     exportMscTop(); 
     exportMscMethodology(); 
     exportRelease(); 
    }else if (reportOption.equals("MSCVLR")){ 
      exportMscTop(); 
      exportVlrTop(); 
      exportMscMethodology(); 
      exportRelease(); 
     } 

    FileOutputStream fileOut = new FileOutputStream(new File(pathname)); 
    wb.write(fileOut); 
    fileOut.close(); 

    vlrPeaks.delete(0, vlrPeaks.length()); 
    topValues.delete(0, topValues.length()); 
    raw.delete(0, raw.length()); 
    vlrRawData.delete(0, vlrRawData.length()); 
} 

其工作正常,但只有一次......當我嘗試執行再次這個代碼我有上面的例外。

感謝您的幫助

+2

所以,你跑了一次,並創造了該名稱的工作簿。然後再運行一次,該名稱已經存在,您需要刪除它並重新運行,或者在每次運行時創建唯一的名稱。 – user123

回答

0

你可能運行的代碼第二次,仍然使用「createSheet()進行」。如果您在已經包含該名稱的工作簿的woorkbook上運行「createSheet()」,則會失敗,並顯示該異常。

使用類似替代以下幾點:

Sheet sheet = workbook.getSheet("Sheet1"); 
if(sheet == null) 
    sheet = workbook.createSheet("Sheet1"); 
+0

你好@carusocomputing,謝謝你的意見,但我已經做到了。在其他方法中,我這樣做:** XSSFSheet top =(XSSFSheet)wb.getSheet(「SheetName」){ \t \t top =(XSSFSheet)wb.createSheet(「SheeName」); \t} **我需要知道**如何在第二次運行代碼時創建其他工作簿?**謝謝 –

相關問題