我正在尝试使用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 ");
但是,我得到的outtpu是
A | B | | | DH3 | C
因此,只在单元格中设置了最后一个值,而前一个值不是。任何人都可以提出错误的建议吗?
答案 0 :(得分: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
放入一个常量,因为你在任何地方都使用它,当你需要在开始时添加另一列时,它会更新...