2012-05-10 5 views
1

Мы используем apache poi 3.8 для синтаксического анализа. Нам нужно иметь возможность обнаруживать (и пропускать) скрытые строки, поскольку они, как правило, содержат мусорные данные в наших файлах.Обнаружение скрытых ячеек в excel с использованием apache poi

Казалось бы, это должно работать:

row.isFormatted() && row.getRowStyle().getHidden() 

Но никогда, кажется, любое форматирование на уровне строк (getRowStyle() всегда возвращает нуль). В крайнем случае мы думали проверять стили ячеек может работать:

for (int i = 0; i < row.getLastCellNum(); i++) { 
    Cell cell = row.getCell(i); 
    if (cell != null && cell.getCellStyle() != null && cell.getCellStyle().getHidden()) 
     ... 

Но для каждой строки мы получаем (пользовательский вывод в выше для цикла):

Cell 0 is not hidden [email protected]/false 

означает «getHidden()» не работать или не работает, как я думаю, это так? Есть ли другой способ обнаружения скрытых строк? (скрытые столбцы также будут хорошим бонусом, но немного менее значимыми)

ответ

5

getRowStyle должен нормально работать, как вы предполагали.

В противном случае, вы можете проверить высоту строки, так как скрытые строки, как правило, имеют высоту устанавливается на 0. Использование row.getHeight() или row.getZeroHeight().

+0

Для скрытых строк 'hidden' устанавливается в' true', но если не указано явное, 'row.getHeight()' всегда возвращает значение рабочей таблицы по умолчанию, которое может быть не равным нулю. Мы можем положиться на 'row.getZeroHeight()' –

+0

. Функция getZeroHeight() работает для usecase, с которой я столкнулся сейчас. Как таковая моя проблема решена, хотя «getRowStyle()» все еще не работает, как кажется. Должен ли я отмечать ваш ответ как правильный ответ или ждать, пока некоторые не дадут некоторую обратную связь по проблеме getRowStyle()? (Я довольно новичок в stackoverflow) – nablex

+0

Обычно стиль строки должен быть правильно загружен POI, и поэтому 'getRowStyle(). GetHidden()' должен работать. Или я думаю. Я предполагаю, что мы можем надежно полагаться на 'getZeroHeight()'. За правильный ответ я не знаю. Как хотите – Alex

2

После попытки нескольких подходов row.getZeroHeight() работал правильно для идентификации скрытой строки. Также для тех, кто застрял с Apache POI < = 3,7 версии, это может быть единственным решением.

Смежные вопросы