#java #excel #apache-poi
Вопрос:
Я хочу прочитать файл Excel и пропустить пустые строки. Мой код считывает данные и пустые ячейки. Как я могу пропустить пустые строки, я использую POI Apache. Помогите мне с этой проблемой
package com.company;
import org.apache.commons.compress.archivers.dump.InvalidFormatException;
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.String;
import java.util.Iterator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
XSSFWorkbook library_table = new XSSFWorkbook(new FileInputStream("C:\Users\admin\Desktop\Курсовая\Table for course work.xlsx"));
XSSFSheet library_sheet = library_table.getSheet("Library");
Iterator rowiter = ((XSSFSheet) library_sheet).rowIterator();
boolean continue_first_row = true;
System.out.println("1 - Namen2 - Authorn3 - Date of publishing");
System.out.print("Choose type of search: ");
int choice = in.nextInt(), count = 0;
while(rowiter.hasNext()){
XSSFRow row = (XSSFRow) rowiter.next();
if (count == 0){
count ;
continue;
}
else {
System.out.println(row.getCell(choice));
}
}
}
}
Ответ №1:
Sheet.rowIterator
не содержит полностью пустых строк. Но он, конечно, содержит строки, в которых заполнена только часть ячеек. И он содержит строки, имеющие формат, или ячейки, имеющие форматы, даже если эти ячейки пусты.
Итак, если необходимо пропустить пустые ячейки, то ваша программа должна проверить, пуста ли найденная ячейка или нет. Самая простая возможность-проверить, является ли Cell
null
значение пустым или Cell.toString
равно String
ему .
...
while(rowiter.hasNext()) { // does not contain totally empty rows
XSSFRow row = (XSSFRow) rowiter.next();
if (count == 0) { //skip header row
count ;
continue;
} else {
XSSFCell cell = row.getCell(choice);
if (cell == null || "".equals(cell.toString())) { // check whether cell is empty
// cell is empty
} else {
System.out.println(cell.toString());
}
}
}
...
Примечание: Полагаться на Cell.toString
это не является хорошей практикой. Вместо этого используйте DataFormatter, чтобы получить значения ячеек как String
.
Пример:
...
import org.apache.poi.ss.usermodel.DataFormatter;
...
while(rowiter.hasNext()) { // does not contain totally empty rows
XSSFRow row = (XSSFRow) rowiter.next();
if (count == 0) { //skip header row
count ;
continue;
} else {
XSSFCell cell = row.getCell(choice);
String cellValue = dataFormatter.formatCellValue(cell);
if ("".equals(cellValue)) { // check whether cell is empty
// cell is empty
} else {
System.out.println(cellValue);
}
}
}
...