【问题标题】:Saving a file as CSV in Java (apache poi)在 Java (apache poi) 中将文件另存为 CSV
【发布时间】:2020-01-09 06:28:25
【问题描述】:

所以,我使用 apache-poi 的 XSSF 模型创建了一个 .xlsx 文件,其中包含我需要的所有数据,但是客户端想要完全相同的数据和相同的格式(它自己的单元格中的每个值),只有在 .csv 文件中。因此,我需要具有不同文件扩展名的相同文件...

我试图将文件的扩展名从 .xlsx 更改为 .csv,但在打开它时我收到一条警告说“文件格式和扩展名不匹配”,但在单击“确定”时文件打开时没有任何错误或错误数据。我能否以某种方式将 XSSF 模型保存为 .csv 文件而不会出现上述错误?

我也尝试使用 apache-commons 中的 CSVPrinter,但它会将一行中的所有数据写入一个单元格(我知道 .csv 文件应该看起来像这样,但客户想要什么客户想要)。

CSVPrinter部分代码:

    FileWriter out = new FileWriter("someFile.csv");
    CSVPrinter csvPrinter = new CSVPrinter(out, CSVFormat.EXCEL);

    if (workbook != null) {
        XSSFSheet sheet1 = workbook.getSheetAt(0);
        Iterator<Row> rowIterator = sheet1.rowIterator();
        while (rowIterator.hasNext()) {
            Row row1 = rowIterator.next();
            Iterator<Cell> cellIterator = row1.cellIterator();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                csvPrinter.print(cell.getStringCellValue());
            }
            csvPrinter.println();
        }

    }
    csvPrinter.flush();
    csvPrinter.close();

在 XSSFWorkbook 中创建和写入数据后调用。

如果我必须使用 CSVPrinter 来完成我需要的工作,有没有办法在不先创建 .xlsx 文件的情况下做到这一点(只需将所需格式的数据直接写入 .csv 文件)?

【问题讨论】:

  • 你不需要先xls,只需使用像opencsv这样的csv writer
  • CSV 没有单元格或格式,只有分隔符之间的文本块。电子表格和 CSV 文件是两种不同的动物。所以你的问题没有意义。投票结束。
  • @BasilBourque 我知道,正如我在我的问题中所写...但是当您手动将 .xlsx 文件转换为 .csv 文件时,数据会保持其原始格式,这就是我的客户想要

标签: java excel csv apache-poi


【解决方案1】:

我找到了解决问题的方法。

我没有使用CSVPrinter csvPrinter = new CSVPrinter(out, CSVFormat.EXCEL);,而是将其更改为CSVPrinter csvPrinter = new CSVPrinter(out, CSVFormat.DEFAULT.withDelimiter(';'));

出于某种原因(如果有人可以向我解释,我将不胜感激),以逗号作为分隔符的 CSV 文件将一行中的所有数据放入一个单元格中,但是当我将分号作为分隔符时,它按我想要的方式工作。

【讨论】:

  • 如果可能的话,你能帮我写出完整的代码吗
猜你喜欢
  • 2014-11-21
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 2014-12-05
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多