使用 apache poi 将 Map<String, List<Map<String,Object>>> 数据写入 excel
writing Map<String, List<Map<String,Object>>> data into excel using apache poi
我正在使用 Map>> 使用 apache poi 库在 springboot 应用程序中创建 excel 文件。
我有数据:{Sheet1=[{header1=abc, header2=def, header3=ghi}], Sheet2=[{header1=ab, header2=de, header3=gh}], Sheet3=[{header1=bc, header2=ef, header3=嗨}]}
我需要创建 excel 如下。
**data.xlsx**
| header1 header2 header3 | |header1 header2 header3 | |header1 header2 header3 |
abc def ghi ab de gh bc ef hi
<Sheet1> <Sheet2> <Sheet3>
我可以使用 Map>> 中的键名创建不同的 sheets data.I 我正在尝试创建 excel sheets 来自值,即 List
我写了下面的代码来填充 header 个名称,如下所示。
//code to create excel sheet
Map<String, List<Map<String, Object>>> data = info.getData(); //getting data from database
XSSFWorkbook wb = new XSSFWorkbook();
FileOutputStream out = new FileOutputStream(new File("C:...path"+"data.xlsx"));
Set<String> keyset = data.keySet();
for(String key: keyset){
XSSFSheet sheet = wb.crateSheet(key);
int rowNo = 0;
List<Map<String, Object>> list = data.get(key);
for(Map<String, Object> value : list){
XSSFRow row = sheet.createRow(rowNo++);
Set<String> headerKeyset = value.keySet();
for(String keyHeader : headerKeyset){
int cellnum= 0;
XSSFCell cell = row.createCell(cellnum++);
cell.setCellValue(keyHeader);
}}}
wb.write(out);
out.close();
.
.
.
我可以在 Excel 文件中创建名为 Sheet1、Sheet2、Sheet3 的不同 Sheets/tab。
但是无法填写正确的 header 和数据,当我 运行 上面的代码时,只有最后一个单元格值被填充如下。
**data.xlsx**
| header3 | |header3 | |header3 |
<Sheet1> <Sheet2> <Sheet3>
有人可以让我知道我必须更改什么才能使其正常工作吗?
您的代码片段不可编译。所以我希望你在 post 之前修改它。
这一行 -> for(Map<String, Object> value : list({
关于代码,您可能遗漏或错放了花括号。在此特定示例中,您的行 wb.write(out);
被调用了 3 次
更新:在您更改代码后,我发现您甚至没有使用 object 值来填充数据,仅使用 header。使用这样的东西:
XSSFRow hrow = sheet.createRow(0);
XSSFRow vrow = sheet.createRow(1);
for(Map<String, Object> value : list) {
Set<String> headerKeyset = value.keySet();
for(String keyHeader : headerKeyset) {
int cellnum= 0;
XSSFCell hcell = hrow.createCell(cellnum++);
hcell.setCellValue(keyHeader);
XSSFCell vcell = vrow.createCell(cellnum++);
vcell.setCellValue(value.getValue(keyHeader));
}
}
我正在使用 Map
我有数据:{Sheet1=[{header1=abc, header2=def, header3=ghi}], Sheet2=[{header1=ab, header2=de, header3=gh}], Sheet3=[{header1=bc, header2=ef, header3=嗨}]}
我需要创建 excel 如下。
**data.xlsx**
| header1 header2 header3 | |header1 header2 header3 | |header1 header2 header3 |
abc def ghi ab de gh bc ef hi
<Sheet1> <Sheet2> <Sheet3>
我可以使用 Map
我写了下面的代码来填充 header 个名称,如下所示。
//code to create excel sheet
Map<String, List<Map<String, Object>>> data = info.getData(); //getting data from database
XSSFWorkbook wb = new XSSFWorkbook();
FileOutputStream out = new FileOutputStream(new File("C:...path"+"data.xlsx"));
Set<String> keyset = data.keySet();
for(String key: keyset){
XSSFSheet sheet = wb.crateSheet(key);
int rowNo = 0;
List<Map<String, Object>> list = data.get(key);
for(Map<String, Object> value : list){
XSSFRow row = sheet.createRow(rowNo++);
Set<String> headerKeyset = value.keySet();
for(String keyHeader : headerKeyset){
int cellnum= 0;
XSSFCell cell = row.createCell(cellnum++);
cell.setCellValue(keyHeader);
}}}
wb.write(out);
out.close();
.
.
.
我可以在 Excel 文件中创建名为 Sheet1、Sheet2、Sheet3 的不同 Sheets/tab。 但是无法填写正确的 header 和数据,当我 运行 上面的代码时,只有最后一个单元格值被填充如下。
**data.xlsx**
| header3 | |header3 | |header3 |
<Sheet1> <Sheet2> <Sheet3>
有人可以让我知道我必须更改什么才能使其正常工作吗?
您的代码片段不可编译。所以我希望你在 post 之前修改它。
这一行 -> for(Map<String, Object> value : list({
关于代码,您可能遗漏或错放了花括号。在此特定示例中,您的行 wb.write(out);
被调用了 3 次
更新:在您更改代码后,我发现您甚至没有使用 object 值来填充数据,仅使用 header。使用这样的东西:
XSSFRow hrow = sheet.createRow(0);
XSSFRow vrow = sheet.createRow(1);
for(Map<String, Object> value : list) {
Set<String> headerKeyset = value.keySet();
for(String keyHeader : headerKeyset) {
int cellnum= 0;
XSSFCell hcell = hrow.createCell(cellnum++);
hcell.setCellValue(keyHeader);
XSSFCell vcell = vrow.createCell(cellnum++);
vcell.setCellValue(value.getValue(keyHeader));
}
}