почему apache poi читает меньше ячеек в ряду Excel - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь получить ячейку, используя именованный диапазон. Но после попытки кода ниже, я не могу получить согласованную ячейку в строке листа, которая получает нулевое исключение при использовании r.getCell().

String cname = "TestName";
Workbook wb = getMyWorkbook(); // retrieve workbook

// retrieve the named range
int namedCellIdx = wb.getNameIndex(cellName);
Name aNamedCell = wb.getNameAt(namedCellIdx);

// retrieve the cell at the named range and test its contents
AreaReference aref = new AreaReference(aNamedCell.getRefersToFormula());
CellReference[] crefs = aref.getAllReferencedCells();
for (int i = 0; i < crefs.length; i++) {
    Sheet s = wb.getSheet(crefs[i].getSheetName());
    Row r = sheet.getRow(crefs[i].getRow());
    Cell c = r.getCell(crefs[i].getCol());
    // extract the cell contents based on cell type etc.
}

1 Ответ

1 голос
/ 04 апреля 2019

В целях экономии памяти на листе не хранятся полностью пустые строки.Также полностью пустые ячейки не сохраняются в строках листа.

Sheet.getRow возвращает ноль, если строка не определена на листе.Также Row.getCell возвращает ноль, если ячейка не определена в этой строке.

Так что нам всегда нужно проверять:

...
Row r = sheet.getRow(crefs[i].getRow());
if (r == null) {
 //row is empty
} else {
 Cell c = r.getCell(crefs[i].getCol());
 if (c == null) {
  //cell is empty
 } else {
  //do soomething with c
 }
}
...
...