【发布时间】:2013-07-18 22:40:15
【问题描述】:
我正在尝试使用 POI 和 hashMaps 编写 Excel 表。我的代码成功创建并填充了一个 Excel 工作表,但并非所有信息都写入工作表。在调试模式下,它似乎写入了 5 个键值对,然后循环到键 [0] 的开头。谁能告诉我我的逻辑错误在哪里?
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet(make + " sheet");
int rowNum = 0;
ConcurrentHashMap <Integer, String[] > data = new
ConcurrentHashMap<Integer, String[]>();
data.put(rowNum++, new String[] {"VIN", "Make", "Model", "Year",
"Major Group", "Caption", "Cap Filter", "Illustration",
"Illus Filter", "PNC", "Part Name", "Part Number", "Quantity",
"Part Filter"});
for (Part p : plist){
String PNC = p.getPNC();
String quantity = p.getQuantity();
if(vFilterId.contains(p.getId())) {
data.put(rowNum++ , new String[] {vinId, make,
model, year, group, caption, capFilter, illusName,
iFilter, PNC, p.getName(), p.getPartNumber(),
quantity, "NONFILTERED"});
} else {
data.put(rowNum++ , new String[] {vinId, make,
model, year, group, caption, capFilter, illusName,
iFilter, PNC, p.getName(), p.getPartNumber(),
quantity, "NONFILTERED"});
}
}
int rowIndex = 0;
Set<Integer> keyset = data.keySet();
for (Integer key : keyset) {
Row row = sheet.createRow(rowIndex++);
Object[] objArr = data.get(key);
int cellIndex = 0;
for (Object obj : objArr) {
Cell cell = row.createCell(cellIndex++);
cell.setCellValue((String) obj);
}
}
try {
FileOutputStream fos = new FileOutputStream(outputFile);
workbook.write(fos);
fos.close();
System.out.println("XLS sheet written.");
} catch (IOException e) {
e.printStackTrace();
}
}
return ReturnConstants.SUCCESS;
}
提前致谢!
【问题讨论】:
-
我得到的输出只有三行数据,但是当我运行相同并打印到 csv 表时,我得到 4060 行返回任何帮助。
-
你在那个 HashMap 中有多少条目?
-
我将 13 个字符串输入到每个键的数组中,我需要它是动态的以允许输入不同数量的部件,因为每个 ViN 可能有数千或一万个部件。
-
我在问插入数据后
data.size()的结果是什么?它是否包含您期望的行数? -
它确实以 3 的大小结束,而不是我期望的对于这个特定的 VIN 应该有 4060 的结果。由于某种原因,它一直循环到方法的开头,我不知道为什么,如果这似乎是一个糟糕的问题,我刚从大学毕业。
标签: java iterator hashmap apache-poi concurrenthashmap