Перейти к основному содержимому

Изменить стиль шрифта ячейки с помощью Apache POI

· 5 мин. чтения

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, чтобы просмотреть эффект стиля шрифта, где мы должны увидеть:

./513714b6ba78354a32d04222e37efe7b.png

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 .