我尝试使用基于 jdk1.6 的poi.jar来遍历一些excel2007数据。但是当我似乎发现一个奇怪的现象时,我遍历行(由 HashMap存储) ())然后将行数据添加到java.util。 ArrayList 。
在启动下一个迭代器时,我首先通过调用Map.clear()来清除行数据,但是当再次调用ArrayList.add()方法时,此行数据将被覆盖旧数据。
Map<String, String> cellForRow = = new HashMap<String, String>();
List<Map<String, String>> rowForSheet = new ArrayList<Map<String, String>>();
for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) {
row = sheet.getRow(j);
if (j == 0) {// the first row is title
titleRow = row;
continue;
}
if (row != null && titleRow.getPhysicalNumberOfCells() > 0) {
// cellForRow = new HashMap<String, String>();
cellForRow.clear();
for (int k = 0; k < titleRow.getPhysicalNumberOfCells(); k++) {// cell
cellForRow.put(getCellValue(titleRow.getCell(k)), getCellValue(row.getCell(k)));
}
}
rowForSheet.add(cellForRow);
}
Next Snippets显示 rowForSheet (列表)的调试日志
[{ Up =Stream, Email=XXX,Down =Stream},
{ Up =Stream, Email=XXX,Down =Stream},
{ Up =Stream, Email=XXX,Down =Stream},
{ Up =Stream, Email=XXX,Down =Stream},
{ Up =Stream, Email=XXX,Down =Stream}]
以后的数据会覆盖旧数据
你呢?
答案 0 :(得分:1)
首先,我会在地图中创建地图,以便每次都添加新地图。
List<Map<String, String>> rowForSheet = new ArrayList<Map<String, String>>();
for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) {
row = sheet.getRow(j);
if (j == 0) {// the first row is title
titleRow = row;
continue;
}
Map<String, String> cellForRow = = new HashMap<String, String>();
if (row != null && titleRow.getPhysicalNumberOfCells() > 0) {
for (int k = 0; k < titleRow.getPhysicalNumberOfCells(); k++) {// cell
cellForRow.put(
getCellValue(titleRow.getCell(k)),
getCellValue(row.getCell(k))
);
}
}
rowForSheet.add(cellForRow);
}
现在,列表中的每个项目都是不同的地图,并添加了您添加的新数据。