好的,我迭代一个列表,而不是水平地将值插入单元格,我将值垂直放在单元格中。
第一次在列表中工作正常但是当我进入列表时第二次它会吹走第一个列表并将其替换为第二列。
如果我在循环结束时删除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;
}
答案 0 :(得分:2)
您正在增加行索引错误。在创建第二行后,row ++将递增。所以你要在索引0处创建两行。如果你将所有行++改为++行,它应该可以工作。
答案 1 :(得分: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++;
}
答案 2 :(得分:1)
这是有效的解决方案:
myRow = sheet.getRow(row);
if(null == myRow)
{
myRow=sheet.createRow(row);
}
答案 3 :(得分: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
akokskis答案很好,实际上更好,要么像在迭代之前那样创建它们,要么检查它是否存在。
答案 4 :(得分: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