2017-05-07 77 views
1

我想創建一個循環來新表添加到工作簿,但下面的代碼無法正常工作。爲什麼循環會覆蓋初始代碼,而不是創建新的XSSFSheet?

它創建了一個新的工作表,但只是覆蓋了第一個表,而不是添加一個新的。

我認爲它可能有一些做的FILEOUT流,但添加fileOut.close()到最後也沒解決問題。

public static void main (String[] args) throws IOException 
{ 
    String response; 
    XSSFWorkbook workbook; 
    do 
    { 
     // prompts user to pick file 
     JFileChooser fc = new JFileChooser(); 
     fc.setCurrentDirectory(new File("C:\\Users\\AMDX12\\Desktop")); 
     fc.setDialogTitle("Choose File"); 
     fc.showOpenDialog(null); 
     File selectedFile = fc.getSelectedFile(); 

     // gets questionPacketNumber from user 
     System.out.println("Enter the number of the question packet: "); 
     Scanner keyboard = new Scanner (System.in); 
     String questionPacketNum = keyboard.nextLine(); 

     // creates new Workbook and a new Sheet 
     workbook = new XSSFWorkbook(); 
     XSSFSheet sheet = workbook.createSheet(questionPacketNum); 

     // loops code 
     System.out.println("would you like to do this again?"); 
     response = keyboard.nextLine(); 

     // saves workbook 
     FileOutputStream fileOut = new FileOutputStream (new File ("c:\\Users\\Student\\newFile.xlsx")); 
     workbook.write(fileOut); 
     // fileOut.close();    
    } while (response.equalsIgnoreCase("yes") == true); 
} 

回答

3

簡單:

workbook = new XSSFWorkbook(); 
XSSFSheet sheet = workbook.createSheet(questionPacketNum); 

你每次循環過程中創建一個新的工作簿。代替; workbook = new XSSFWorkbook();應該去在那個循環的前面

換句話說:如果你希望循環添加片;然後確保您的循環不會丟棄上次迭代中添加的一張工作表的最後一個工作簿!根據記載:你調用close()你的輸出流;但理想情況下,您只需在這裏使用try-with-resources

除此之外:請閱讀single responsibility principle。你可憐的方法對太多事情負責。相反:編寫一個創建工作簿的方法;一個要求用戶輸入;一個增加新的牀單;最後一個將整個事情寫入文件。

+0

我跟你說什麼,它解決了這一問題。感謝您提到單一責任原則。 –

相關問題