当前位置: 首页 > 知识库问答 >
问题:

将项目写入Excel单元格

陶文林
2023-03-14

我对Eclipse Java编码一无所知。我正在努力完成一个管理库存的项目。我遇到的问题是,当我试图将项目写入excel单元格时,我收到错误消息,称数组超出了界限。

附言:项目和item.get部分名称等都定义在另一个类文件下。请帮忙。谢谢

            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);
    }

共有1个答案

叶冥夜
2023-03-14

我可以看到附加代码有很多问题:

>

如前所述,您正在重新设置相同的单元格值4次

您多次创建同一单元格样式(这不是在后台缓存的,可以创建的单元格样式数量很大程度上是有限的,因此如果生成数千行,您可能会遇到麻烦

在编写工作簿后,您不会流式处理。Java中的流是一种宝贵的资源,需要手动关闭。

如果没有堆栈跟踪,很难百分之百地说出您看到的ArrayOutOfBound问题来自何处,然而,我的猜测是,您试图使用不存在的索引访问项目(来自项目集合),这是一个结果,即您是从行索引而不是现有的项目列表中驱动报表数据。

此外,由于您对Java非常陌生,因此有两条指导原则可以帮助您在将来生成更好、更不容易出错的代码:

>

  • 使用适当的Java命名约定-请遵循标准Java命名约定http://java.about.com/od/javasyntax/a/nameconventions.htm,您的代码将更易于阅读和推理(尤其是当您寻求社区帮助时)-即sentorder类应命名为sentorder。

    尝试将代码拆分为更小、更可测试的模块,即可以从主方法中调用helpercreateDataRow方法,通常在一个方法中有多个内部循环,这使得测试、调试和推理变得异常困难。

    除非您真的需要生成. 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();
        }
    }
    

  •  类似资料:
    • 问题内容: 是的,我知道元组是不可变的,但是这种情况使得我需要在每个元组中插入一个额外的值。因此,其中一项是金额,我需要在其旁边添加其他货币的新项目,如下所示: 可能? 谢谢! 问题答案: 您可以将其转换为列表,插入项目,然后将其转换回元组。

    • 如何使用Apache POI将文本/图像写入特定的合并单元格。特定单元格意味着,我直接将文本或图像写入B3: D7。下面的代码是每个索引的手动代码,而不是单元格的特定名称和数量。我想通过单元格名称和编号放置。

    • 我正在编写一个程序,它将数据写入excel表格的表格格式。我的代码提供了我想要的所有细节。 但是为了得到表格格式,我必须在excel sheet中遵循以下步骤 我想让我的代码自动生成我想要的格式,而不需要我在excel表中执行上面显示的步骤。有人能帮我吗?提前道谢。下面显示的是我的代码。 `

    • 问题内容: 如何在poi的帮助下在单元格中写下我的全部价值? 即如果值是1000.000,那么我怎么能写出完整的值而不会在“之后”截断000。与POI?表示我想要全部价值。 就我而言,只需要1000,但这对我来说不是正确的格式。 问题答案: 您必须设置要存储此数字的单元格的“格式”。示例代码: 来源:http : //poi.apache.org/spreadsheet/quick- guide.

    • 本文向大家介绍python3.7 openpyxl 在excel单元格中写入数据实例,包括了python3.7 openpyxl 在excel单元格中写入数据实例的使用技巧和注意事项,需要的朋友参考一下 本来我是想尝试,选中某个多个单元格复制到同一个sheet的其他位置,找了很多资料没有找到,目前只有这么一个办法,如果有大佬看到,欢迎补充请教。 补充知识:【openpyxl】python中对Exc

    • 请帮我解决这个问题。 提前谢谢你。