来自TXT的Apache POI Excel副本

问题描述 投票:-2回答:2

我有问题,我想请求你的帮助。问题是,我正在尝试将文本文件(.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();

我想知道的是:有什么方法可以做到这一点?

java excel apache apache-poi
2个回答
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();

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.