Apache POIを使用して.xlsドキュメント内の空の行を決定するにはどうすればよいですか?
POIプロジェクトで次のメソッドを使用していますが、うまく機能しています。これはzellerのソリューションのバリエーションです。
public static boolean isRowEmpty(Row row) {
for (int c = row.getFirstCellNum(); c < row.getLastCellNum(); c++) {
Cell cell = row.getCell(c);
if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK)
return false;
}
return true;
}
行反復子は、データを含む行のみを返しますが、それらが完全に空の場合、行インデックスによる反復は、getRow(index)
がnull
を返します
溶液:
POIバージョン3.14まで(Sergii Lisnychyiに感謝):
_private boolean checkIfRowIsEmpty(Row row) {
if (row == null) {
return true;
}
if (row.getLastCellNum() <= 0) {
return true;
}
for (int cellNum = row.getFirstCellNum(); cellNum < row.getLastCellNum(); cellNum++) {
Cell cell = row.getCell(cellNum);
if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK && StringUtils.isNotBlank(cell.toString())) {
return false;
}
}
return true;
}
_
POIバージョン3.15から4.2(int getCellType()
は非推奨):
_ private boolean checkIfRowIsEmpty(Row row) {
if (row == null) {
return true;
}
if (row.getLastCellNum() <= 0) {
return true;
}
for (int cellNum = row.getFirstCellNum(); cellNum < row.getLastCellNum(); cellNum++) {
Cell cell = row.getCell(cellNum);
if (cell != null && cell.getCellTypeEnum() != CellType.BLANK && StringUtils.isNotBlank(cell.toString())) {
return false;
}
}
return true;
}
_
POIバージョン4から(CellTypeEnum getCellTypeEnum()
はintではなくEnumを返します):
_private boolean checkIfRowIsEmpty(Row row) {
if (row == null) {
return true;
}
if (row.getLastCellNum() <= 0) {
return true;
}
for (int cellNum = row.getFirstCellNum(); cellNum < row.getLastCellNum(); cellNum++) {
Cell cell = row.getCell(cellNum);
if (cell != null && cell.getCellTypeEnum() != CellType.BLANK && StringUtils.isNotBlank(cell.toString())) {
return false;
}
}
return true;
}
_
行内のすべてのセルを反復処理し、それらがすべて空かどうかを確認する必要があります。私は他の解決策を知りません...
short c;
for (c = lastRow.getFirstCellNum(); c <= lastRow.getLastCellNum(); c++) {
cell = lastRow.getCell(c);
if (cell != null && lastRow.getCell(c).getCellType() != HSSFCell.CELL_TYPE_BLANK) {
nonBlankRowFound = true;
}
}
コードは here から
はい。ただし、一部の行にある場合、一部のセル = ""にあり、別のセルに空の値があります。この方法はより良く機能します:
boolean isEmptyRow(Row row){
boolean isEmptyRow = true;
for(int cellNum = row.getFirstCellNum(); cellNum < row.getLastCellNum(); cellNum++){
Cell cell = row.getCell(cellNum);
if(cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK && StringUtils.isNotBlank(cell.toString())){
isEmptyRow = false;
}
}
return isEmptyRow;
}
行n
が空かどうかを確認したい場合、Apache POIの行は1ベースではなく0ベースであることを思い出して、次のようなものが必要です。
Row r = sheet.getRow(n-1); // 2nd row = row 1
boolean hasData = true;
if (r == null) {
// Row has never been used
hasData = false;
} else {
// Check to see if all cells in the row are blank (empty)
hasData = false;
for (Cell c : r) {
if (c.getCellType() != Cell.CELL_TYPE_BLANK) {
hasData = true;
break;
}
}
}
boolean isEmptyRow(Row row) {
boolean isEmpty=true;
String data="";
for(Cell cell:row) {
data=data.concat(cell.getStringCellValue());
}
if(!data.trim().isEmpty()) {
isEmpty=false;
}
return isEmpty;
}
if(iterator.hasNext)を使用してみてください
Row nextRow = null;
Cell nextCell = null;
Iterator<Row> iterator = firstSheet.rowIterator();
if(iterator.hasNext) {
return true;
}
else {
return false;
}
Apache-poi [4+]:を使用している場合
次に、以下の方法が役立ちます。提案された他の方法がうまくいかなかったので、私はこのようにしなければなりませんでした。
_public static boolean isRowEmpty(Row row) {
boolean isEmpty = true;
DataFormatter dataFormatter = new DataFormatter();
if(row != null) {
for(Cell cell: row) {
if(dataFormatter.formatCellValue(cell).trim().length() > 0) {
isEmpty = false;
break;
}
}
}
return isEmpty;
}
_
メソッドdataFormatter.formatCellValue(cell)
は、セルがnull
またはBLANK
の場合、_""
_、_empty / ZERO length string
_を返します。
参照用のインポートステートメント:
_import org.Apache.poi.ss.usermodel.DataFormatter;
import org.Apache.poi.ss.usermodel.Sheet;
import org.Apache.poi.ss.usermodel.Row;
import org.Apache.poi.ss.usermodel.Cell;
_
お役に立てれば!
cellReferenceのインスタンスを取得し、インスタンスでformatAsString()を使用します。空の文字列と比較します
`
if("".equals(cellRef.formatAsString())){
System.out.println("this is an empty cell");
}else{
System.out.println("Cell value : "+cellRef.formatAsString());
}
`参照: http://www.javabeat.net/2007/10/Apache-poi-reading-Excel-sheet-using-Java/