如何使用java将以制表符分隔的“.txt”文件转换为Excel“.xls”格式?

时间:2012-04-03 16:03:24

标签: java type-conversion text-files xls

我有498个文本文件来自网站上表单的WebScraping结果,我想使用java将它全部转换为Excel标准(.xls)格式。

我必须每月使用相同数量的文件进行此转换,在基于手动的转换中每个文件花费不少于10秒,总结1h23m的乐观情况带来的不便,因此加载方法每个文件都是禁止用手或机器人击中“save_as”。

3 个答案:

答案 0 :(得分:2)

您可以使用apache poi项目在java中生成xls文件。

答案 1 :(得分:2)

Excel可以将它们作为csv文件加载,只需指定字段分隔符为Tab

答案 2 :(得分:1)

我会在你想要的所有文件上循环一个数组。您可以将.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文件所在的目录即可。