Java POI Excel创建新列和新行

好吧,我迭代一个列表,而不是水平地将值插入单元格,我将值垂直放在单元格中。

它第一次通过列表工作正常,但当我进入列表第二次它吹掉第一个列表并在第二列中替换它。

如果我在循环结束时删除row= 0 ,它看起来像:

 val 1 val 2 val 1 val 2 

=========

 int row = 0; int k = 1; for (List dataList: someList) { Row myRow = sheet.createRow ((short)row); myRow.createCell(k).setCellValue (dataList.getVal())); myRow = sheet.createRow ((short)row++); myRow.createCell(k).setCellValue (dataList.getSecVal())); myRow = sheet.createRow ((short)row++); k++; row = 0; } 

您正在增加行索引错误。 在创建第二行后,row ++将递增。 因此,您在索引0处创建了两行。如果将所有行++更改为++行,它应该可以工作。

在循环的每次迭代中,您将重新创建索引0和1处的行。当您重新创建这些行时,您将要清除所有已存在的数据。

尝试这样的事情:

 int k = 1; Row myRow1 = sheet.createRow(0); //first row of the document Row myRow2 = sheet.createRow(1); for (List dataList: someList) { myRow1.createCell(k).setCellValue (dataList.getVal())); myRow2.createCell(k).setCellValue (dataList.getSecVal())); k++; } 

您每次都要创建一行,您想要先检查该行是否存在。 像这样的东西会起作用。

  myRow = sheet.getRow((short)row); if (myRow == null) { myRow = sheet.createRow((short)row); } 

此外,在您当前的代码中,每次您在0处重新创建两次行。

  Row myRow = sheet.createRow ((short)row); myRow.createCell(k).setCellValue (dataList.getVal())); myRow = sheet.createRow ((short)row++); // Here, you're creating a new row at index 0 

akokskis答案很好,实际上更好,要么像迭代之前那样创建它们,要么检查它是否存在。

当您遍历第一个列表时。 您已创建行。 下次迭代时,您必须更新行而不是再次创建行。 当您创建新行时,它将在最后添加。

在遍历List1时,当您到达最后时,您已经创建了三个新行。 如果你现在使row = 0并迭代第二个列表List2。 它将在0处添加一个新行,依此类推,直到它到达List2的末尾。

如果在迭代结束时没有使rows = 0。 最后将添加新行。

 int row = 0; int k = 1; ArrayList rows = new ArrayList(); for(int i = 0; i 

这是有效的解决方案:

 myRow = sheet.getRow(row); if(null == myRow) { myRow=sheet.createRow(row); }