gpt4 book ai didi

java - Java中基于标题写入csv/excel

转载 作者:行者123 更新时间:2023-12-01 18:49:27 26 4
gpt4 key购买 nike

我有一个 JSON,其中的条目看起来像

[{ "key": { "keyLabel": "Label1" }, "specs": [{ "specKey": "spec1", "specValue": ["s11"] }, { "specKey": "spec2", "specValue": ["s12"] }] },

{ "key": { "keyLabel": "Label2" }, "specs": [{ "specKey": "spec1", "specValue": ["s21"] }, { "specKey": "spec3", "specValue": ["s22"] }] }]

Spec Keys 根据 KeyLabel 值呈现变化。正如您在上面看到的,如果 KeyLabel = Label1,则存在spec1和spec2。如果KeyLabel = Label2,则存在spec1和spec3

我想使用它创建一个 CSV/Excel,以便标题/顶行作为以下列

KeyLabel, spec1, spec2, spec3 (basically union of all specKeys)

Label1, s11,s12

Label2, s21, ,s22

因此,具有挑战性的部分是在写入文件时,我需要在适当的列中写入。

关于是否有任何 csv/excel 库可以使这变得更容易的任何想法。天真的方式看起来确实非常优雅 - 这是存储标题的有序列表和基本的关键写入逗号和值,以便值位于写入列中

最佳答案

我认为你不需要特定的库来做到这一点。您应该只需要一些通用库 jackson poi-ooxml

  1. 首先,您应该将 json 字符串读取到 POJO 对象(引用: http://www.jsonschema2pojo.org/ )

    列表示例 = new ObjectMapper().readValue(json, new TypeReference>() {});

  2. 秒,收集 header

    列表标题 = 示例 。溪流() .map(示例::getSpecs) .flatMap(集合::流) .map(规范::getSpecKey) 。清楚的() .collect(Collectors.toList());header.add(0, " key ");

  3. 接下来,使用POI库编写excel文件

最终 XSSFWorkbook 工作簿 = new XSSFWorkbook(); 最终 XSSFSheet 工作表 = workbook.createSheet(WorkbookUtil.createSafeSheetName("sheetname"));

    // Headers
Row row = sheet.createRow(0);
for (int index = 0; index < headers.size(); index++) {
row.createCell(index).setCellValue(headers.get(index));
}

// Content
int startRow = 1;
for (Example object : objects) {
row = sheet.createRow(startRow++);
// key label

row.createCell(0).setCellValue(object.getKey().getKeyLabel());
// spec
for (int index = 1; index < headers.size(); index++) {
String speckey = headers.get(index);
String value = object.getSpecs().stream().filter(e -> e.getSpecKey().equals(speckey)).findAny().map(Spec::getSpecValue).orElse(Collections.emptyList()).toString();
row.createCell(index).setCellValue(value);
}
}

FileOutputStream fileOut = new FileOutputStream("D:\\poi-generated-file.xlsx");
try {
workbook.write(fileOut);
} finally {
fileOut.close();
workbook.close();
}

它只是示例代码。您应该修改并更新以更好。

关于java - Java中基于标题写入csv/excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59762684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com