【发布时间】:2017-11-16 12:27:23
【问题描述】:
我有一张如下图:
Map<String, Map<String, List<String>>> finalDataSet = new LinkedHashMap<>();
它有如下数据:
{Name1={CurrentUserStory=[AB-1413, AB-1504], CUS_Status=[In Testing, Ready for Deployment], SubTask=[AB-1547, AB-1508], ST_Status=[In Development, Done], TimeSpent=[19800, 23400]},Name2={CurrentUserStory=[AB-1377, AB-149],CUS_Status=[Ready for Testing, Ready for Development],SubTask=[AB-1545, AB-1510], ST_Status=[Ready for Testing, Closed],TimeSpent=[25200, 5400]}}
上面的数据我想以下面的格式写入excel。
当我试图将这些数据写入 excel 时,只有“TimeSpent”列正在写入并且所有列都是空的。这是我的代码:
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sh = wb.createSheet("CSG_Report");
Row row = sh.createRow(2);
for (Map.Entry<String, Map<String, List<String>>> m : finalDataSet.entrySet()) {
int col=1;
row= sh.createRow(index);
int userindex=index;
for(Map.Entry<String, List<String>> innerMap:m.getValue().entrySet())
{
index = userindex;
List<String> val=innerMap.getValue();
row= sh.createRow(index);
for (String string : val) {
row= sh.createRow(index);
row=sh.getRow(index);
Cell cell = row.createCell(col);
cell.setCellValue(string);
index++;
}
col++;
}
}
FileOutputStream out = new FileOutputStream(new
File("D:\\Output.xlsx"));
wb.write(out);
out.close();
wb.close();
请帮我完成它。感谢你的帮助。提前致谢。
【问题讨论】:
-
AFAIK 你不能,它是“基于行的”,但是如果列/行的数量是固定的,那么你可以创建所有需要的单元格,然后用一些循环填充它们
-
它是基于行的,但如果你可以控制你的大小,你可以让它基于列......简单地想象你只有一列,然后在这一列上附加另一列。
-
你的数据结构不合适。仅当每个属性中的值的数量可以变化时才会考虑这种设计,在这种情况下,您将无法以任何简单的方式在 Excel 上绘制它们。取而代之的是,您可以创建一个带有属性
CurrentUserStory、CUS_Status、SubTask、ST_Status的class并将它们映射到名称,这样您的工作会容易得多。 -
你的意思是说如果
List<String> val=innerMap.getValue();val.size() 是静态的,那么我们可以做到。我是正确的@canillas 和@RC -
在 POI 中没有所谓的列...它只是行和该行中的单个单元格。因此,如果您尝试在每列中迭代并且每次创建新行...这将不起作用...一旦创建任何行...它将覆盖前一个实例,因此最后您只会得到最后一个实例。
标签: java excel apache-poi