【发布时间】: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