来自TXT的Apache POI Excel副本

时间:2014-06-16 14:42:08

标签: java excel apache apache-poi

我有问题,我想请求你的帮助。问题是,我试图将文本文件(.txt)中的数据放入带有Apache POI的Excel工作表中。我从txt复制所有数据没有问题,但是当我粘贴到选中的工作表单元格时,它会包含我选择的单元格内的所有值(当然,这就是我命令要做的)。

当我手动执行此操作时,打开txt文件,创建新的Excel文件,ctrl + c txt文件,excel工作表上的ctrl + v,它就会出现所有标签,就像我希望的那样。 txt文件是tabbed,因此excel知道它需要在另一列上。 我没有任何问题,根本没有编码,因为没有错误或其他东西,并且手动我可以用3种不同的方式来做。

我用来复制txt的代码。

String all= "";
try (BufferedReader br = new BufferedReader(new FileReader("C:\\arquivo.txt"))) {
     String sCurrentLine;
     while ((sCurrentLine = br.readLine()) != null) {
        all = all + "\n" + sCurrentLine;
    }
    } catch (IOException e) {
        e.printStackTrace();
}

用于将值设置为excel的代码。

String fileName = "C:/Testing.xls";
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Teste");
HSSFRow row = sheet.createRow((short) 0);
row.createCell(0).setAsActiveCell();
FileOutputStream fileOut = new FileOutputStream(fileName);
workbook.write(fileOut);
fileOut.close();

我想知道的是:有什么办法可以做到吗?

2 个答案:

答案 0 :(得分:0)

使用选项卡式删除器" \ t"从文本文件中分割每一行。并写入适当的单元格值。 分享您的代码,以便您获得更多帮助。

答案 1 :(得分:0)

您需要解析输入文本,然后根据文本包含的内容创建行和单元格 尝试这样的事情:

    LinkedList<String[]> text_lines = new LinkedList<>();
    try (BufferedReader br = new BufferedReader(new FileReader("C:\\arquivo.txt"))) {
        String sCurrentLine;
        while ((sCurrentLine = br.readLine()) != null) {
            text_lines.add(sCurrentLine.split("\\t"));                 
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    String fileName = "C:/Testing.xls";
    Workbook workbook = new HSSFWorkbook();
    Sheet sheet = workbook.createSheet("Teste");
    int row_num = 0;
    for(String[] line : text_lines){
        Row row = sheet.createRow(row_num++);
        int cell_num = 0;
        for(String value : line){
            Cell cell = row.createCell(cell_num++);
            cell.setCellValue(value);
        }
    }

    FileOutputStream fileOut = new FileOutputStream(fileName);
    workbook.write(fileOut);
    fileOut.close();

这会将文本文件的每一行读入由标签字符(这是Excel中的默认分隔符)拆分的String[]数组,并放入有序列表中。您可以将split函数中的正则表达式模式更改为适合您文本的模式。第二部分遍历String数组列表,并将每个列表写入一行,将列表的每个块(单词,句子,数字......)写入其自己的单元格中。