Импорт данных CSV с помощью Apache POI

Как я могу эффективно импортировать данные CSV с помощью Apache POI? Если у меня есть очень большой CSV-файл, который я хотел бы сохранить в своей электронной таблице Excel, то я не думаю, что переход по ячейкам — лучший способ импортировать...?


person Jake    schedule 06.04.2009    source источник


Ответы (4)


Apache POI никогда не предназначался для обращения к CSV-файлам. Хотя файл CSV можно открыть в Excel, у Excel есть собственная программа чтения, которая выполняет автоматический импорт. Предполагается, что ваш CSV имеет суффикс .csv вместо .txt. Если он имеет суффикс .txt, сохраните его как .csv. Все, что вам нужно сделать, это щелкнуть правой кнопкой мыши CSV и открыть с помощью Excel. Presto, CSV был импортирован в Excel.

Я предполагаю, что вы хотите проанализировать данные из txt-файла в файл Excel. Если это так, я бы посоветовал вам использовать библиотеку, например SuperCSV, вместо того, чтобы пытаться заставить POI что-то сделать. это никогда не было предназначено для этого. Он загрузит все это в Bean, Map или List по вашему выбору, поскольку он анализирует данные, а затем вы можете либо записать их обратно в выбранном вами формате в файл .csv, либо использовать JDBC-ODBC Bridge или Apache POI для записи. непосредственно в формате и .XLS. Добавляет дополнительный шаг, но тогда у вас есть полный контроль над данными.

SuperCSV имеет лицензию Apache2, поэтому она должна подойти для всего, что вы решите с ней делать.

Или просто используйте функцию split в Java и разбейте CSV на массивы и загрузите массивы в .xls с POI.

person WolfmanDragon    schedule 06.07.2009

Мы пишем java-код на основе расширения файла. Здесь мы имеем дело с расширением .csv, а вот код Apache POI для его обработки. Мы разделяем контент и сохраняем в массиве, а затем используем его в дальнейшем.

CSVParser parser = new CSVParser(new FileReader("D:/your_file.csv"), CSVFormat.DEFAULT);
List<CSVRecord> list = parser.getRecords();
for (CSVRecord record : list) {
    String[] arr = new String[record.size()];
    int i = 0;
    for (String str : rec) {
        arr[i++] = str;
    }
}  
parser.close();    

Связанная зависимость Maven:

<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.2</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.5</version>
</dependency>
<dependency>
    <groupId>com.opencsv</groupId>
    <artifactId>opencsv</artifactId>
    <version>4.2</version>
</dependency>
person mannedear    schedule 27.07.2018

Используйте apache commons-csv для файлов CSV. Обновите свой pom.xml со следующей зависимостью

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.5</version>
</dependency>

Вы можете найти полезные примеры из - нажмите здесь< /а>

person Arundev    schedule 15.03.2018

Самый эффективный способ добавить информацию в электронную таблицу Excel — использовать массив. Этот код:

Sheets(1).Range("A1").Resize(uBound(myArray),uBound(myArray,2)).Value = myArray

заполняет диапазон листов из двумерного массива, где нижняя граница равна 1.

В вашей ситуации я бы сначала прочитал файл CSV в массив, а ЗАТЕМ использовал синтаксис, подобный приведенному выше, чтобы поместить его на рабочий лист.

Стэн Скотт

person Stan Scott    schedule 07.04.2009