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