1. Введение
Apache POI — это библиотека с открытым исходным кодом, позволяющая разработчикам программного обеспечения создавать документы Microsoft Office и управлять ими . Помимо других функций, он позволяет разработчикам программно изменять форматирование документов.
В этой статье мы обсудим, как изменить стиль ячеек в Microsoft Excel при использовании класса CellStyle
. То есть, используя этот класс, мы можем написать код для изменения стиля ячеек в документе Microsoft Excel. Во-первых, это функция, предоставляемая библиотекой Apache POI, которая позволяет создавать стиль с несколькими свойствами форматирования внутри рабочей книги. Во-вторых, стиль можно применить к нескольким ячейкам в этой книге.
Кроме того, мы также рассмотрим распространенные ошибки при использовании класса CellStyle
.
2. Apache POI и зависимость Maven
Давайте добавим Apache POI в качестве зависимости к нашему файлу проекта pom.xml
:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.0</version>
</dependency>
3. Создание CellStyle
Начнем с создания экземпляра CellStyle
:
Workbook workbook = new XSSFWorkbook(fileLocation);
CellStyle cellStyle = wb.createCellStyle();
Затем установите необходимое свойство форматирования. Например, приведенный ниже код установит формат даты:
cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
Самое главное, мы можем установить несколько свойств форматирования CellStyle
, чтобы получить желаемую комбинацию стилей. Например, мы применяем приведенный ниже код к тому же объекту CellStyle
. Поэтому он имеет форматированный по дате стиль, а также стиль текста с выравниванием по центру:
cellStyle.setAlignment(HorizontalAlignment.CENTER);
Обратите внимание, что CellStyle
имеет несколько свойств форматирования, которые мы можем изменить :
| Имущество | Описание |
| `Формат данных` | Формат данных для ячейки, например дата |
| `Выравнивание` | Тип горизонтального выравнивания для ячейки |
| `Скрытый` | Должна ли ячейка быть скрыта |
| `отступ` | Количество пробелов для отступа текста в ячейке |
| `ГраницаБоттом` ,
граница слева
,
ГраницаПраво
,
ГраницаВерх
| Тип границы, используемой для нижней, левой, правой и верхней границы ячейки |
| `Шрифт` | Свойство шрифта для этого стиля, например цвет шрифта. |
Мы еще вернемся к свойству Font
позже, когда будем использовать его для изменения стиля шрифта.
4. Использование CellStyle
для форматирования шрифта
Свойство Font
CellStyle
— это место , где мы устанавливаем форматирование, связанное со шрифтом. Например, мы можем установить имя шрифта, цвет и размер. Мы можем установить, будет ли шрифт жирным или курсивом. Оба свойства Font
могут принимать значения true
или false
. Мы также можем установить стиль подчеркивания:
| Ценность | Имущество |
| `U_NONE` | Текст без подчеркивания |
| `ВЫ НЕ ЖЕНАТЫ` | Текст с одним подчеркиванием, в котором подчеркнуто только слово |
| `U_SINGLE_ACCOUNTING` | Текст с одним подчеркиванием, в котором подчеркнута почти вся ширина ячейки |
| `U_DOUBLE` | Двойное подчеркивание текста, в котором подчеркнуто только слово |
| `U_DOUBLE_ACCOUNTING` | Двойное подчеркивание текста, когда подчеркнута почти вся ширина ячейки |
Продолжим с предыдущего примера. Мы напишем класс CellStyler
с методом, создающим стиль для текста предупреждения:
public class CellStyler {
public CellStyle createWarningColor(Workbook workbook) {
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setFontName("Courier New");
font.setBold(true);
font.setUnderline(Font.U_SINGLE);
font.setColor(HSSFColorPredefined.DARK_RED.getIndex());
style.setFont(font);
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
return style;
}
}
Теперь давайте создадим книгу Apache POI и получим первый рабочий лист:
Workbook workbook = new XSSFWorkbook(fileLocation);
Sheet sheet = workbook.getSheetAt(0);
Обратите внимание, что мы устанавливаем высоту строки, чтобы мы могли видеть эффект выравнивания текста :
Row row1 = sheet.createRow(0);
row1.setHeightInPoints((short) 40);
Давайте создадим экземпляр класса и используем его для установки стиля
CellStyler styler = new CellStyler();
CellStyle style = styler.createWarningColor(workbook);
Cell cell1 = row1.createCell(0);
cell1.setCellStyle(style);
cell1.setCellValue("Hello");
Cell cell2 = row1.createCell(1);
cell2.setCellStyle(style);
cell2.setCellValue("world!");
Теперь давайте сохраним эту книгу в файл и откроем файл в Microsoft Excel, чтобы просмотреть эффект стиля шрифта, где мы должны увидеть:
5. Распространенные ошибки
Давайте рассмотрим две распространенные ошибки при использовании CellStyle
.
5.1. Случайно изменить все стили ячеек
Во-первых, распространенной ошибкой является получение CellStyle
из ячейки и начало его модификации. В документации Apache POI для метода getCellStyle
упоминается, что метод getCellStyle
ячейки всегда будет возвращать ненулевое значение `` . Это означает, что ячейка имеет значение по умолчанию, которое также является стилем по умолчанию, который изначально используется всеми ячейками в книге. Поэтому приведенный ниже код заставит все ячейки иметь формат даты:
cell.setCellValue(rdf.getEffectiveDate());
cell.getCellStyle().setDataFormat(HSSFDataFormat.getBuiltinFormat("d-mmm-yy"));
5.2. Создать новый стиль для каждой ячейки
Еще одна распространенная ошибка — слишком много похожих стилей в рабочей книге:
CellStyle style1 = codeToCreateCellStyle();
Cell cell1 = row1.createCell(0);
cell1.setCellStyle(style1);
CellStyle style2 = codeToCreateCellStyle();
Cell cell2 = row1.createCell(1);
cell2.setCellStyle(style2);
CellStyle привязан
к рабочей книге . Из-за этого похожий стиль должен использоваться несколькими ячейками. В приведенном выше примере стиль должен быть создан только один раз и использоваться совместно между ячейкой1
и ячейкой2
:
CellStyle style1 = codeToCreateCellStyle();
Cell cell1 = row1.createCell(0);
cell1.setCellStyle(style1);
cell1.setCellValue("Hello");
Cell cell2 = row1.createCell(1);
cell2.setCellStyle(style1);
cell2.setCellValue("world!");
6. Резюме
В этой статье мы узнали, как использовать CellStyle
и его свойство Font
для оформления ячейки в Apache POI. Стилизация ячейки относительно проста, если нам удастся избежать ловушек, как описано в этой статье.
В примере кода мы показали, как программно стилизовать электронные таблицы по мере необходимости, как если бы мы использовали само приложение Excel. Это наиболее важно, когда есть требования создать электронную таблицу с красивым представлением данных.
Как всегда, исходный код статьи доступен на GitHub .