Возможно ли создание CSV с помощью Apache POI? - PullRequest
3 голосов
/ 22 февраля 2012

Мне нужно сгенерировать CSV-файлы, и я наткнулся на модуль в самом нашем проекте, который использует Apache POI для создания листов Excel.Поэтому я подумал, что могу использовать то же самое для создания CSV.Поэтому я спросил брата Google, но он не смог найти ничего, что точно говорит, что Apache POI можно использовать для генерации файла CSV.Я также проверял следующий API, и он говорит только о листах xls, а не о csv.Есть идеи?

http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Workbook.html

Ответы [ 3 ]

9 голосов
/ 23 февраля 2012

Apache Poi не будет выводить в CSV для вас. Однако у вас есть несколько хороших вариантов, в зависимости от того, какие данные вы пишете в CSV.

Если вы знаете, что ни одна из ваших ячеек не будет содержать маркеры csv, такие как запятые, кавычки, окончания строк, то вы можете циклически проходить по строкам данных, копировать текст в StringBuffer и отправлять его в обычный Java-ввод-вывод. Вот пример написания SQL-запроса в CSV по этим линиям: Список рассылки Poi: запись CSV

В противном случае, вместо того, чтобы самостоятельно выяснять, как экранировать специальные символы, вы должны проверить проект opencsv

7 голосов
/ 01 марта 2016

Если вы заходите на официальный веб-сайт Apache POI , вы можете найти множество примеров там.Существует также пример, который показывает, как можно получить вывод в формате csv с помощью apache POI.

Пример ToCSV

0 голосов
/ 11 января 2019

Основная стратегия:

1) Apache Commons CSV - стандартная библиотека для записи значений CSV.

2) Но нам нужно самим пройтись по Рабочей книге и затем вызвать принтер Commons CSV для каждого значения ячейки с новой строкой в ​​конце каждой строки. К сожалению, это пользовательский код, он не доступен автоматически в XSSF. Но это легко:

        // In this example we construct CSVPrinter on a File, can also do an OutputStream
        Reader reader = Files.newBufferedReader(Paths.get(SAMPLE_CSV_FILE_PATH));
        CSVPrinter csvPrinter = new CSVPrinter(reader, CSVFormat.DEFAULT);              

        if (workbook != null) {
            XSSFSheet sheet = workbook.getSheetAt(0); // Sheet #0
            Iterator<Row> rowIterator = sheet.rowIterator();
            while (rowIterator.hasNext()) {               
                Row row = rowIterator.next();
                Iterator<Cell> cellIterator = row.cellIterator();
                while (cellIterator.hasNext()) {
                    Cell cell = cellIterator.next();
                    csvPrinter.print(cell.getStringCellValue()); // Call Commons CSV here to print
                }
                // Newline after each row
                csvPrinter.println();
            }

        }
        // at the end, close and flush CSVPrinter
        csvPrinter.flush();
        csvPrinter.close();
...