[英]Write items into excel cell
我對Eclipse Java編碼絕對陌生。 我正在嘗試完成一個管理庫存的項目。 我遇到的問題是,當我嘗試將項目寫入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);
}
我可以看到附帶的代碼有很多問題:
創建新的FileOutputStream
時缺少文件擴展名-由於您正在生成.xls工作簿,因此您可能希望將其存儲在XLS文件中(擴展名不會自動添加),也只需確保您擁有正確的文件路徑即可您具有寫許可權的目錄(本地應用程序目錄,在這種情況下應該可以)。
如前所述,您要重置相同的單元格值4次
您多次創建相同的單元格樣式(這不會緩存在幕后,並且只能創建數量有限的單元格樣式,因此,如果要生成數千行,可能會遇到麻煩
編寫工作簿后,您無需flush()
和close()
流。 Java流中的寶貴資源需要手動關閉。
沒有堆棧跟蹤,很難說出您所看到的ArrayOutOfBound問題的出處是100%,但是我的猜測是您正在嘗試使用不存在的索引來訪問項目(來自項目集合)。結果是您從行索引而不是項目列表中驅動報表數據。
另外,由於您是Java的新手,所以有一些准則可以使您在將來產生希望更好,更不易出錯的代碼:
使用正確的Java命名約定-請遵循標准的Java命名約定http://java.about.com/od/javasyntax/a/nameconventions.htm ,您的代碼將更易於閱讀和推理(尤其是當您尋找來自社區的幫助)-即sendorder類應命名為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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.