0

我正在尝试使用 Apache POI 将数据从我的 jsp 导出到 excel。我需要的列数取决于两个参数,因此,我通过查询获取它。

对于 EX:如果需要的动态列数 = 3,那么输出应该是这样的。

 A | B | DH1 | DH2 | DH3 | C

这里 A、B、C = 静态列标题。

DH = 动态列标题(从查询中获取。)

为此,我最初设置了 A、B、C,然后找到所需的 DH 列数。然后我生成 DH 列。之后,我找出每个 DH 列中需要的值,将该值存储在 Arraylist 中,然后遍历 Arraylist 并设置该值。

这里的代码

            HSSFCell c1= row.createCell(0);
            HSSFCell c2= row.createCell(1);

           HSSFCell cellObject = null;

          oRecordMetaInfo = getNoofDynamicColumns();
          NoofColumns = oRecordMetaInfo.getRecordCount();

                    for(int i = 2; i < NoofColumns + 2; i++)
        {
            cellObject =     row.createCell((int) i);
        }

           HSSFCell c3 = row.createCell((int) (NoofColumns + 2));


          c1.setCellValue(" A ");
          c2.setCellValue(" B ");

         Array1 = new ArrayList();

        Array1 = dao.getDynamicColumnValues();


     If(Array1.size != 0)
    {  
      QueryRow oRow = null;
        Iterator oIt = null;
       oIt = Array1.iterator();

       while (oIt.hasNext()) {
            oRow = (QueryRow) oIt.next();
            oRow.get("DYNAMIC_VALUE");

           cellObject.setCellValue(oRow.get("DYNAMIC_VALUE").getString());
          }
        }

          c3.setCellValue(" C ");

但是,我得到的输出是

 A | B |  |  | DH3 | C 

因此,只有最后一个值被设置在单元格中,而不是前一个值。任何人都可以提出什么问题吗?

4

1 回答 1

2

您的问题是您正在创建 3 个 DH 单元,但只保留对最后一个单元的引用,因此覆盖它 3 次

此位创建 3 列(或设置的多列):

    for(int i = 2; i < NoofColumns + 2; i++)
    {
        cellObject =     row.createCell((int) i);
    }

但如您所见,只保留最后一个。那么当你这样做时:

  while (oIt.hasNext()) {
        oRow = (QueryRow) oIt.next();
        oRow.get("DYNAMIC_VALUE");

       cellObject.setCellValue(oRow.get("DYNAMIC_VALUE").getString());
  }

您不断覆盖相同的最后一个单元格

您需要更改逻辑以每次都获取正确的单元格,例如

  int cellNumber = 2;
  while (oIt.hasNext()) {
        oRow = (QueryRow) oIt.next();
        oRow.get("DYNAMIC_VALUE");

       cellObject = row.getCell(cellNumber);
       cellObject.setCellValue(oRow.get("DYNAMIC_VALUE").getString());
       cellNumber++;
  }

或者,创建单元并将它们存储在您并行迭代的数组中,或类似的东西。另外,考虑将其2放入一个常量中,因为您在任何地方都使用它,并且当您需要在稍后的开头添加另一列时更新它会很麻烦......

于 2013-11-12T11:17:20.380 回答