Как преобразовать файл .txt, разделенный табуляцией, в формат Excel .xls с помощью java?

У меня есть 498 текстовых файлов, полученных в результате результатов WebScraping из формы на веб-сайте, и я хочу преобразовать все это в стандартный формат Excel (.xls) с помощью java.

Мне придется выполнять это преобразование каждый месяц с одним и тем же количеством файлов, занимая не менее 10 секунд на файл при преобразовании вручную, суммируя полные 1 час 23 минуты неудобств в лучшем случае оптимизма, поэтому метод загрузки каждого файла и нажимать "save_as" вручную или роботом запрещено.


person XenoRo    schedule 03.04.2012    source источник
comment
Проще было бы сделать все это прямо в Excel с помощью VBA, чем учить POI, писать код на Java,...   -  person user207421    schedule 04.04.2012


Ответы (3)


вы можете использовать проект apache poi для создания файлов xls в java.

person jtahlborn    schedule 03.04.2012
comment
Можете ли вы дать мне способы, как правильно сделать преобразование? Не знаю, как действовать, поскольку в javadoc apache poi есть функции преобразования .xls и создания .xls, и я получаю смешанные результаты в Google. Образцы Java или псевдокода были бы хорошим дополнением. - person XenoRo; 03.04.2012
comment
Неважно, только что нашел два учебника, которые заполнили пробелы в том, что не имело для меня смысла в javadocs poi. На будущее исх. для людей с таким же вопросом: здесь @ kodejava.org и здесь @ avajava.com - person XenoRo; 03.04.2012

Excel может загружать их как CSV-файлы, просто укажите, что разделитель полей равен Tab.

person Victor Sorokin    schedule 03.04.2012

У меня был бы массив, перебирающий все файлы, которые вы хотите. Вы можете прочитать файл .csv как стандартный текстовый файл, в котором каждая строка хранится в массиве, а затем, перебирая его, вы можете создать лист Excel.

Теперь я никогда не создавал книгу Excel с нуля, но я редактировал их. Я написал следующее. Это будет перебирать все файлы в каталоге и сканировать их. Он просто поместит данные из каждого файла один за другим на первый лист. Было бы неплохо использовать итераторы, но я позволю вам это сделать. :)

public void convertCSV(File dir) throws IOException {
    // Gets the CSV files.
    File[] csvFiles = dir.listFiles();
    // Sets up the Workbook and gets the 1st (0) sheet.
    File excelFile = new File("H:\\yourOutput.xls");
    InputStream input = new FileInputStream(excelFile);
    HSSFWorkbook workbook = new HSSFWorkbook(input);
    HSSFSheet sheet = workbook.getSheetAt(0);

    int rowNo = 0;
    int columnNo = 0;

    // Loop through the files.
    for(File file : csvFiles) {
        Scanner scanner = new Scanner(file);
        while(scanner.hasNextLine()) {
            String line = scanner.nextLine();
            // Gets the row and if it doesn't exist it will create it.
            Row tempRow = sheet.getRow(rowNo);
            if(tempRow == null)
                tempRow = sheet.createRow(rowNo);

            Scanner lineScanner = new Scanner(line);
            lineScanner.useDelimiter("\t");
            // While there is more text to get it will loop.
            while(lineScanner.hasNext()) {
                // Gets the cell in that row and if it is null then it will be created.
                Cell tempCell = tempRow.getCell(columnNo, Row.CREATE_NULL_AS_BLANK);
                String output = lineScanner.next();
                // Write the output to that cell.
                tempCell.setCellValue(new HSSFRichTextString(output));
                columnNo++;
            }
            // Resets the column count for the new row.
            columnNo = 0;
            rowNo++;
        }
    }
    // Writes the file and closes everything.
    FileOutputStream out = new FileOutputStream(excelFile);
    workbook.write(out);
    input.close();
    out.close();
}

Протестировал его, и он работает с табуляцией в качестве разделителя. Вам просто нужно указать каталог, в котором находятся ваши файлы CSV.

person TikkaBhuna    schedule 03.04.2012