在Java中将文件保存为CSV(apache poi)

在Java中将文件保存为CSV(apache poi),java,excel,csv,apache-poi,Java,Excel,Csv,Apache Poi,因此,我使用ApachePOI的XSSF模型创建了一个.xlsx文件,其中包含了我需要的所有数据,但是客户机想要的是完全相同的数据,并且在它自己的单元格中的每个值都具有相同的格式,只有在一个.csv文件中。所以,我需要一个不同文件扩展名的相同文件 我试图将文件的扩展名从.xlsx更改为.csv,但打开后,我收到一条警告,说明文件格式和扩展名不匹配,但单击“确定”后,文件将打开,没有任何错误或错误数据。我是否可以将XSSF模型保存为.csv文件,而不出现上述错误 我还尝试使用apache comm

因此,我使用ApachePOI的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();
在XSSF工作簿中创建和写入数据后调用此函数


如果我必须使用CSVPrinter来完成我需要的工作,有没有一种方法可以不创建.xlsx文件而直接将所需格式的数据写入.csv文件?

我找到了解决问题的方法

不是使用CSVPrinter CSVPrinter=新的CSVPrinterout,而是使用CSVFormat.EXCEL;我已将其更改为CSVPrinter CSVPrinter=new CSVPrinterout,CSVFormat.DEFAULT.withDelimiter“;”


出于某种原因,如果有人能向我解释一下,我将不胜感激。以逗号作为分隔符的CSV文件将一行中的所有数据放在一个单元格中,但当我以分号作为分隔符时,它会按照我希望的方式工作。

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