无法dynamic设置HSSFCell对象的值

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

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

A | B | DH1 | DH2 | DH3 | C 

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

DH =dynamic列标题(从查询中提取)

为此,我首先设置A,B,C,然后find所需的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 

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

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

这个位创build了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++; } 

或者,创build单元格并将其存储在并行迭代的数组中,或者类似的东西。 另外,考虑把这2变成一个常量,当你在任何地方使用它时,当你需要在开始时添加另一个列时,这将是一个更新的过程。