Преобразуйте .csv в .xls в Java

Кто-либо здесь знает о каком-либо быстром, очевидном способе для преобразования файлов CSV в xls или xlsx файлы в Java?

У меня есть что-то уже для управления файлами CSV на месте, и мне нужна дополнительная совместимость для других программ.

Пример кода в дополнение к именам пакета всегда хорошо ценится.

Большое спасибо,

Justian

Вот мой код к настоящему времени. Я должен удалить возвраты (" \n") от строк. Некоторые мои ячейки содержат несколько строк информации (список), таким образом, я могу использовать "\n" в csv для указания на несколько строк в ячейке, но xls рассматривает их, как будто я означаю помещать их на новую строку.

Код изменяется из Интернета и немного грязный в данный момент. Вы могли бы заметить некоторые устаревшие методы, как это было записано в 2004, и убеждаться проигнорировать ужасные операторы возврата. Я просто использую S.o.p в данный момент для тестирования, и я очищу это позже.

package jab.jm.io;

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class FileConverter {

    public static String ConvertCSVToXLS(String file) throws IOException {

        if (file.indexOf(".csv") < 0)
            return "Error converting file: .csv file not given.";

        String name = FileManager.getFileNameFromPath(file, false);
        ArrayList<ArrayList<String>> arList = new ArrayList<ArrayList<String>>();
        ArrayList<String> al = null;

        String thisLine;
        DataInputStream myInput = new DataInputStream(new FileInputStream(file));

        while ((thisLine = myInput.readLine()) != null) {
            al = new ArrayList<String>();
            String strar[] = thisLine.split(",");

            for (int j = 0; j < strar.length; j++) {
                // My Attempt (BELOW)
                String edit = strar[j].replace('\n', ' ');
                al.add(edit);
            }

            arList.add(al);
            System.out.println();
        }

        try {
            HSSFWorkbook hwb = new HSSFWorkbook();
            HSSFSheet sheet = hwb.createSheet("new sheet");

            for (int k = 0; k < arList.size(); k++) {
                ArrayList<String> ardata = (ArrayList<String>) arList.get(k);
                HSSFRow row = sheet.createRow((short) 0 + k);

                for (int p = 0; p < ardata.size(); p++) {
                    System.out.print(ardata.get(p));
                    HSSFCell cell = row.createCell((short) p);
                    cell.setCellValue(ardata.get(p).toString());
                }
            }

            FileOutputStream fileOut = new FileOutputStream(
                    FileManager.getCleanPath() + "/converted files/" + name
                            + ".xls");
            hwb.write(fileOut);
            fileOut.close();

            System.out.println(name + ".xls has been generated");
        } catch (Exception ex) {
        }

        return "";
    }
}
10
задан Justian Meyer 6 July 2010 в 20:20
поделиться

3 ответа

Не знаю, знаете ли вы это уже, но:

  • Excel (если это ваша настоящая цель) легко может читать файлы .csv напрямую, поэтому любое преобразование, которое вы бы сделали, будьте вежливы только по отношению к своим менее «одаренным» пользователям.
  • CSV - это формат с наименьшим общим знаменателем. Маловероятно, что какой-либо конвертер добавит информацию к файлу .csv , которая сделает его более полезным. Другими словами, CSV - это «тупой» формат, и преобразование его в .xls (вероятно) увеличит размер файла, но не сделает формат более умным.

Предложение Кертиса о POI - первое, что пришло мне в голову.

Если вы выполняете это преобразование на компьютере с Windows, другой альтернативой может быть Jacob , мост Java-COM, который позволит вам эффективно удаленно управлять Excel из программы Java, чтобы выполнять какие-либо действия. например, открыть файл и сохранить в другом формате, возможно, даже применить некоторые изменения форматирования или что-то подобное.

Наконец, я также добился определенного успеха, выполняя SQL INSERT (через JDBC) в лист Excel, доступ к которому осуществляется через мост JDBC-ODBC. то есть ODBC может сделать файл Excel похожим на базу данных. Однако это не очень гибко, вы не можете попросить БД создать файлы с произвольным именем .XLS .


РЕДАКТИРОВАТЬ:

Мне кажется, что readLine () уже не выдает вам целые строки. Как узнать, что возврат каретки не является символом конца строки? Вы должны иметь возможность проверить это с помощью операторов печати отладки сразу после readLine ().

Если это действительно так, то это было бы отстой, потому что вы могли бы

  • либо распознать неполные строки и вставить их вместе,
  • , либо написать свою собственную замену для readLine (). Простым подходом было бы читать символ за символом, заменяя CR в строке CSV и накапливая текст в StringBuilder, пока вы не почувствуете, что у вас есть полная строка.

Обе альтернативы - работа, которой вы, вероятно, не ждали.

7
ответ дан 3 December 2019 в 19:31
поделиться

Вы писали:

У меня есть кое-что для управления CSV-файлами уже на месте, и мне нужно дополнительное совместимость с другими программами.

Что это за другие программы? Требуются ли они для доступа к вашим данным через файлы Excel, или они могут работать с подключением JDBC или ODBC к базе данных? Используя базу данных в качестве центрального хранилища, вы можете извлекать данные в файлы CSV или другие форматы по мере необходимости.

0
ответ дан 3 December 2019 в 19:31
поделиться

Если вы хотите читать или записывать файлы XLS или XLSX на Java, вам подойдет Apache POI: http://poi.apache.org/

5
ответ дан 3 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: