Кто-нибудь знаком со способом заблокировать строку в электронной таблице, созданной с помощью Apache POI 3.7? Под блокировкой я подразумеваю, что хочу, чтобы строка заголовка для столбцов оставалась видимой, когда пользователь прокручивает строки. В моей созданной электронной таблице будет 500 строк, и было бы полезно, если бы имена столбцов всегда были видны.
java
apache-poi
крошечный
источник
источник
Ответы:
Если вам нужно заморозить какую-либо конкретную строку в любом месте листа, вы можете использовать (Внутри
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:
Я не знаю подробностей этого, но стоит разобраться, если вы в той лодке.
источник
Вы не можете заморозить средний ряд, не заморозив ряды над ним.
Предположим, у вас есть 100 строк, а ваша строка заголовка находится в строке 50. Вы можете ожидать, что только строка 50 будет заблокирована, так что при прокрутке от строки 1-49 все прокручивается вверх, а когда она достигает строки 50, 50-я строка прокручивается до вверху и остается там при прокрутке строк 51-100.
Но есть обходной путь. Что вы можете сделать, так это сгруппировать строки, а затем заморозить их.
Сначала сгруппируйте строки от 1 до 49, а затем закрепите панели от 1 до 50. Теперь пользователь может свернуть группу, а затем работать с таблицей с заблокированным заголовком таблицы вверху.
sheet.groupRow(0, 49); sheet.createFreezePane(0, 50);
Однако есть небольшая загвоздка. MS Excel не позволит развернуть / свернуть группу, если лист защищен. Для этого вам нужно написать макрос.
источник