Строки заголовка блокировки POI Apache
кто-нибудь там знаком с способом блокировки строки в электронной таблице, созданной с помощью Apache POI 3.7? Под блокировкой я имею в виду, что я хочу, чтобы строка заголовка для столбцов оставалась видимой, когда пользователь прокручивает строки. Моя созданная электронная таблица будет иметь 500 строк, и было бы полезно, если бы имена столбцов всегда были видны.
3 ответов:
в случае, если вам нужно заморозить любую конкретную строку в любом месте листа вы можете использовать (в пределах
org.apache.poi.ss.usermodel.Sheet) (доступно также в POI 3.7)Sheet.createFreezePane(int colSplit, int rowSplit, int leftmostColumn, int topRow)в вашем случае, если вы хотите заморозить только ваши первые X строк, то
int leftmostColumn, int topRowраздел будет удален, и вы можете использовать толькоSheet.createFreezePane(int colSplit, int rowSplit)sheet1.createFreezePane(0, 5); // this will freeze first five rows
для этого можно создать панель заморозки следующим образом:
workbook.getSheetAt(workbook.getActiveSheetIndex()).createFreezePane(0, 1);это заморозит первую строку на месте. Есть еще один метод с большим количеством опций, так что проверьте API.
единственное, что следует отметить, если вы используете книги XSSF-есть упоминание об ошибке в версии 3.8-beta3, которая исправила поведение замораживания панелей с помощью таблиц XSSF:
50884 - xssf и hssf замораживание панели теперь ведут себя то же самое(poi-разработчики)
вы не можете заморозить среднюю строку, не получив строки над ней также заморожены.
скажем, у вас есть 100 строк, а строка заголовка находится в строке 50. Вы можете ожидать, что только строка 50 блокируется, так что при прокрутке из строки 1-49 все прокручивается вверх, а когда она достигает строки 50, 50-я строка прокручивается вверх и остается там, когда прокручиваются строки 51-100.
но, есть обходной путь. Что вы можете сделать, это сгруппировать строки, а затем заморозить их.
сначала сгруппируйте строки из 1-49, а затем заморозьте панели из 1-50. Теперь пользователь может свернуть группу, а затем работать с таблицей с заблокированным заголовком таблицы и вверху.
sheet.groupRow(0, 49); sheet.createFreezePane(0, 50);есть небольшой улов, хотя. MS Excel не позволит вам развернуть / свернуть группу, если лист защищен. Для этого нужно написать макрос.
Comments