Apache POI Excel копировать из TXT

#java #excel #apache #apache-poi

#java #excel #апач #apache-poi #apache

Вопрос:

у меня возникла проблема, и я хотел бы попросить вашей помощи. Дело в том, что я пытаюсь поместить данные из текстового файла (.txt) в лист Excel с помощью Apache POI. Я копирую все данные из txt без проблем, но когда я вставляю в выбранную ячейку листа, она содержит все значения внутри выбранной мной ячейки (конечно, это то, что я приказал сделать).

Когда я делаю это вручную, открываю txt-файл, создаю новый файл Excel, ctrl c txt-файл, ctrl v на листе Excel, все вкладки находятся на месте, как я хотел бы сделать. Файл txt имеет вкладки, поэтому 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();
  

То, что я хотел бы знать: есть какой-нибудь способ сделать это?

Ответ №1:

Вам нужно проанализировать входной текст, затем создать строки и ячейки на основе того, что содержит этот текст.
Попробуйте что-то вроде этого:

     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 функции на то, что подходит вашему тексту. Вторая часть перебирает список строковых массивов и записывает каждый список в строку, записывая каждый фрагмент списка (слово, предложение, число …) в свою ячейку.

Комментарии:

1. Как вы записываете в файл Testing.xls в коде?

2. @whatthefish: часть записи файла в коде спрашивающего показалась мне прекрасной, я добавил ее в ответ.

Ответ №2:

разделите каждую строку из текстового файла с помощью разделителя с вкладками » t» и запишите в соответствующее значение ячейки. поделитесь своим кодом, чтобы вы получили больше рук помощи.

Комментарии:

1. Я не хотел удалять текстовый файл, потому что иногда этот текст будет очень большим, поэтому я пытался избежать этого, чтобы предотвратить некоторую потерю производительности