2014-04-26 132 views
0

我對Eclipse Java編碼絕對陌生。我正在嘗試完成管理庫存的項目。我遇到的問題是,當我嘗試將項目寫入Excel單元格時,出現錯誤,說明數組超出範圍。將項目寫入Excel單元格

PS:item和item.getPartname等都在另一個類文件中定義。 請幫忙。感謝

  FileOutputStream os =new FileOutputStream("orderreceipt"); 
      //Create a new workbook for writing data 
      HSSFWorkbook wb2 = new HSSFWorkbook(); 
      //Create a new sheet: 
      HSSFSheet newsheet = wb2.createSheet("MyNewSheet"); 
      //Create a new row: 

      for (int i=0; i<6; i++){ 
       HSSFRow newrow = newsheet.createRow(i); 
       sentorder item = (sentorder)items.get(i); 
       for (short j=0; j<5; j++){ 
        HSSFCell cell = newrow.createCell(j); 

        cell.setCellValue(item.getPartname()); 
        cell.setCellValue(item.getPartnumber()); 
        cell.setCellValue(item.getQuantity()); 
        cell.setCellValue(new Date()); 
         HSSFCellStyle styleOfCell = wb2.createCellStyle(); 
         styleOfCell.setDataFormat(HSSFDataFormat 
          .getBuiltinFormat("m/d/yy")); 
         styleOfCell.setFillForegroundColor(HSSFColor.AQUA.index); 
         styleOfCell.setFillPattern(HSSFCellStyle.BORDER_THIN); 
         cell.setCellStyle(styleOfCell); 

        }} 
      wb2.write(os); 
    } 
+2

看起來你設置多個值同一個小區,不應該每個單元都有不同的* *值? –

回答

1

我可以看到與連接的代碼問題不少:

  • 缺少文件擴展名創建新FileOutputStream時 - 因爲你生成的.xls工作簿中,你可能會喜歡將它存儲在XLS文件中(擴展名不會自動添加),也只是確保你有一個適當的文件路徑到你有寫權限的目錄(本地應用程序目錄,因爲在這種情況下應該是確定的)。

  • 如前所述你重新設置相同的單元格的值的4倍

  • 您所創建的同一單元格樣式多次(這不是緩存幕後,有很大程度上的細胞款式數量有限它可以創建,所以如果你產生幾個幾千行的,你可能會陷入麻煩

  • 你不flush(),寫你的工作簿。行旅中的Java這就需要手動關閉一個寶貴的資源後close()流。

  • 如果沒有堆棧跟蹤,很難說100%你所看到的ArrayOutOfBound問題來自哪裏,但是我的猜測是你試圖訪問一個項目(來自項目集合)的索引不存在,這是您從行索引而不是您擁有的項目列表驅動報表數據的結果。

而且,由於你是很新的Java的一對夫婦的指引,讓你產生在未來有希望更好,不易出錯代碼:

  • 使用正確的Java命名約定 - 請遵循標準Java命名約定http://java.about.com/od/javasyntax/a/nameconventions.htm,您的代碼將更易於閱讀和推理(特別是當您從社區尋求幫助時) - 即sentorder類應該命名爲SentOrder。

  • 嘗試,更容易測試模塊,即你可以有一個從你的主要方法叫幫手createDataRow方法,你的代碼分割成較小的,一般有超過一對夫婦的內部循環的一個方法,使他們非常困難的測試,調試和理由。

  • 除非您確實需要生成.xls格式,否則請考慮使用XSSF *類生成xlsx文檔 - 它對HSSF *有很多改進(包括更好的dataFormat支持)。

有那些記住我已經重寫你的榜樣:

public void improved(List<SentOrder> items) throws IOException { 
    HSSFWorkbook workbook = new HSSFWorkbook(); 
    HSSFSheet sheet = workbook.createSheet("MyNewSheet"); 

    HSSFCellStyle styleOfCell = workbook.createCellStyle(); 
    styleOfCell.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy")); 
    styleOfCell.setFillForegroundColor(HSSFColor.AQUA.index); 
    styleOfCell.setFillPattern(HSSFCellStyle.BORDER_THIN); 

    int rowIndex = 0; 
    for(SentOrder item : items) { 
     HSSFRow row = sheet.createRow(rowIndex++); 
     HSSFCell nameCell = row.createCell(0); 
     nameCell.setCellValue(item.getPartName()); 
     HSSFCell numberCell = row.createCell(1); 
     numberCell.setCellValue(item.getPartNumber()); 
     HSSFCell quantityCell = row.createCell(2); 
     quantityCell.setCellValue(item.getQuantity()); 
     HSSFCell dateCell = row.createCell(3); 
     dateCell.setCellValue(new Date()); 
     dateCell.setCellStyle(styleOfCell); 
    } 

    FileOutputStream os = new FileOutputStream("order_receipt.xls"); 
    try {    
     workbook.write(os); 
    } finally { 
     os.flush(); 
     os.close(); 
    } 
} 
相關問題