1

好的,所以我遍历一个列表,而不是将值水平插入单元格,而是将值垂直放入单元格中。

它在列表中第一次运行良好,但是当我第二次进入列表时,它会删除第一个列表并将其替换为第二列。

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;
}
4

5 回答 5

2

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

于 2013-08-13T15:54:49.127 回答
2

在循环的每次迭代中,您都在索引 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++;
}
于 2013-08-13T15:58:53.490 回答
1

这是有效的解决方案:

myRow = sheet.getRow(row);

if(null == myRow)
{

    myRow=sheet.createRow(row);
}
于 2013-08-13T22:47:33.253 回答
0

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

      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

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

于 2013-08-13T15:58:32.440 回答
0

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

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

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

int row = 0;
int k = 1; 

ArrayList<Row> rows = new ArrayList<Row>();
for(int i = 0; i<someList.size();i++){
    Row myRow = sheet.createRow(i);
    rows.add(myRow);
    myRow = null;
}

for (List dataList: someList) {
    for(Row row : rows){
        row.createCell(k).setCellValue(dataList.getVal()));         
    }

    k++;
}


     Col1    Col2    Col3    Col4
Row1   1
Row2   2
Row3          3 
Row4          4

or 

     Col1    Col2    Col3    Col4
Row1   1       3
Row2   2       4
Row3           
Row4          
于 2013-08-13T16:03:06.393 回答