подскажите пожалуйста имеется диапазон ячеек необходимо с использованием Apache POI отобразить все внутренние границы диапазона
CellRangeAddress region=new
CellRangeAddress(7,9,0,4);
RegionUtil.setBorderRight(BorderStyle.MEDIUM,region,sheet);
RegionUtil.setBorderLeft(BorderStyle.MEDIUM,region,sheet);
RegionUtil.setBorderBottom(BorderStyle.MEDIUM,region,sheet);
RegionUtil.setBorderTop(BorderStyle.MEDIUM,region,sheet);
Приведенный код отображает внешние границы, а необходимо внутренние, знаю, что можно создать стиль для каждой ячейки диапазона и по всем пройтись, но думаю есть способ рациональнее. Спасибо.
Единственный известный мне способ - создавать стили для каждой ячейки.
Но надо помнить, что у Workbook есть ограничения, накладываемые особенностями форматов XLS и XLSX. Например, стилей в XLSX не может быть больше 64000. А у версии 2003 года их вообще допускалось только 4000. Так же есть и другие ограничения.
То есть, идея такая - создать набор уникальных CellStyles, и потом переиспользовать их в разных ячейках.
CellStyle myCellStyle = wb.createCellStyle();
myCellStyle.setFillForegroundColor(HSSFColor.YELLOW.index);
myCellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
...
И дальше, когда создаёшь ячейки, просто переиспользуешь myCellStyle:
cell.setCellStyle(myCellStyle);
Куда интереснее то, как подбирать такие стили. Я не могу показать производственный код, но идея такая: создаётся кеш стилей (Map). Ключ формируется на основе всех значений стиля, которые могут различаться. Хотя бы так:
private String getCellStyleId() {
return String.format("%s%s%s", fontName, fontHeightInPoints, fontColor);
}
Чтобы ключ не был слишком большим, можно поиграться с хэшами.
Далее всё просто. Строим ID стиля и ищем его в Map. Если есть - хорошо, берём существующий. В другом случае создаём и заносим в кеш. Удачи.
С радостью выслушаю другие решения и комментарии.
Я нашел вот такое решение
PropertyTemplate propertyTemplate=new PropertyTemplate();
propertyTemplate.drawBorders(new CellRangeAddress(7,9,0,4),
BorderStyle.MEDIUM,BorderExtent.RIGHT);
propertyTemplate.applyBorders(sheet);
Вот ссылка на документацию: Javadoc
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я пытаюсь добавить запись в таблицы но при этом выбивает ошибку
Не создается сам файл и запись в него не производитсяКак можно исправить?
Нужно проверить массив на возрастание, убывание, одинаковые поля и поля зигзаги(1,2,-1,3,4)Если код работает отдельными частями правильно, то почему-то...
Пишу свой домашний проект паралельно обучениюИспользую JDBC для работы с MySQL