Как преобразовать разделенный табуляцией файл ".txt" в формат Excel ".xls", используя Java? - PullRequest
2 голосов
/ 03 апреля 2012

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

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

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

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

2 голосов
/ 03 апреля 2012

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

1 голос
/ 03 апреля 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-файлы.

...