gpt4 book ai didi

java - 无法动态设置 HSSFCell 对象的值

转载 作者:行者123 更新时间:2023-12-02 06:32:51 25 4
gpt4 key购买 nike

我正在尝试使用 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 

因此,只有最后一个值会在单元格中设置,而前一个值则不会。谁能指出问题出在哪里?

最佳答案

您的问题是您正在创建 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 放入常量中,因为您在任何地方都使用它,并且当您稍后需要在开头添加另一列时,更新它会很麻烦......

关于java - 无法动态设置 HSSFCell 对象的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19922418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com