2014-04-26 98 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(); 
    } 
} 
相关问题