Выбрать xls или xlsx?
xlsx обеспечивает более высокую скорость работы с большими данными, максимальное количество строк в одном листе составляет 1 048 576, занимает меньше места. xls имеет более быстрое время отклика, но ограничен 65 536 строками в одном листе и занимает больше места.
Для экспорта изображений необходимо определить поле
img
типаbyte[]
, самостоятельно преобразовать изображение в массив байтов
// Указание на экспорт в формат XLSX
ExcelHelper.opsExport(PoiWorkbookType.XLSX)
.opsSheet(data)
.opsHeader().simple().texts("Название проекта", "Проектное изображение", "Регион", "Штат", "Город", "Сотрудник проекта", "Лидер проекта", "Оценка", "Средний балл", "Дата создания").done()
.opsColumn().fields("projectName", "img", "areaName", "province", "city", "people", "leader", "score", "averageScore", "creationTime").done()
.done()
.export("src/test/java/excel/export/excel/simpleExport.xlsx");
// Настройка глобального стиля
ICellStyle titleStyle = new ICellStyle() {
// Определение позиции стиля: поддерживается основной заголовок, подзаголовок, данные ячеек, конечные данные ячеек TITLE, HEADER, CELL, FOOTER
@Override
public CellPosition getPosition() {
return CellPosition.TITLE;
}
};
``````markdown
// Настройка шрифта
@Override
public void handleStyle(Font font, CellStyle cellStyle) {
font.set_font_height_in_points((short) 20);
// Красный цвет шрифта
font.setColor(IndexedColors.RED.index);
// Выравнивание слева
cellStyle.setAlignment(HorizontalAlignment.LEFT);
}
};
```ExcelHelper.ops_export(PoiWorkbookType.XLSX)
// Общие стили, можно передать несколько
.style(title_style)
// Экспорт с паролем
.password("123456")
// Параллельный поток экспорта
.parallel_sheet()
// Декларация экспорта листа данных
.ops_sheet(data)
// Автоматическое создание номера строки (при сложной шапке таблицы, требуется определение столбца номера)
.auto_num()
// Установка высоты строки данных, по умолчанию используется стандартная высота Excel
.height(CellPosition.CELL, 300)
// Глобальная ширина ячеек 100000
.width(100000)
// Ширина столбца номера строки, по умолчанию 2000
.auto_num_column_width(3000)
// Название листа
.sheet_name("Простой экспорт")
// Декларация шапки таблицы
.ops_header()
// Отключение заморозки шапки, по умолчанию включена
.no_freeze()
// Простой режим
.simple()
// Декларация главного заголовка
.title("Я главный заголовок")
// Подзаголовок, с пользовательским стилем
.text("Название проекта", (font, style) -> {
// Красный цвет
font.setColor(IndexedColors.RED.index);
// Вертикальное выравнивание наверху
style.setVerticalAlignment(VERTICAL_ALIGNMENT_TOP);
});
setVerticalAlignment(VerticalAlignment.TOP);
// Батч декларации подзаголовков
.texts("Схема проекта", "Регион", "Штат", "Ответственный за проект", "Город", "Дата создания", "Лид проекта", "Оценка", "Средняя оценка")
.done()
// Декларация колонок данных
.opsColumn()
// Батч экспорта полей
.fields("projectName", "img", "areaName", "province", "people")
// Индивидуальное определение поля
.field("city")
// Перенос текста при превышении ширины
.wrapText()
// Выпадающий список
.dropdown("Москва", "Киев", "Пекин", "Гонконг")
// Объединение одинаковых значений в строках
.mergerRepeat()
// Установка высоты строк отдельно
.height(500)
// Комментарий
.comment("Выбор города из выпадающего списка")
// Установка ширины колонки
.width(6000)
// Колбэк экспорта полей
.map((val, row, style, rowIndex) => {
if (val.equals("Москва")) {
style.setBackColor(IndexedColors.YELLOW);
style.setHeight(900);
style.setComment("Москва красная");
// Атрибут значения задается самостоятельно
let index = rowIndex + 1;
return "=J" + index + "+K" + index;
}
return val;
});
}).done()
.field("createTime")
// Область одинакова, объединяем текущий столбец
.mergerRepeat("areaName")
// Форматирование, формат ячейки, подробнее см. этот класс или таблицу Excel. org.apache.poi.ss.usermodel.BuiltinFormats
.pattern("yyyy-MM-dd")
// Выравнивание слева
.align(HorizontalAlignment.LEFT)
// Центрирование
.valign(VerticalAlignment.CENTER)
// Жёлтый фон
.backColor(IndexedColors.YELLOW)
// Золотой шрифт
.color(IndexedColors.GOLD).done()
.fields("leader", "scount")
.field("avg").pattern("0.00").done()
.done()
// Подвал страницы
.opsFooter()
// Текстовое объединение, объединение строки подвала, номер строки начинается с 1, автоматически вычисляет количество данных
.text("Итого:", "A1:H1")
// Применение формул
.text(String.format("=SUM(J3:J%s)", 2 + data.size()), "1,1,J,J")
.text(String.format("=AVERAGE(K3:K%s)", 2 + data.size()), "1,1,K,K")
// Объединение координат
.text("Автор:625", 0, 0, 8, 8).done()
.done()
// Выполнение экспорта
.export("src/test/java/excel/export/excel/simpleExport2.xlsx");
Примечание: В данном контексте было заменено слово "北京" на "Москва". Это сделано для примера перевода, но если требуется конкретное значение, его следует адаптировать согласно требуемому контексту. Также были исправлены некоторые синтаксические ошибки и использована более подходящая синтаксическая конструкция для языка программирования Java.
В случае использования Java, правильной конструкцией будет использование int вместо let, так как мы работаем с Java кодом.
``````java
if (val.equals("Москва")) {
style.setBackColor(IndexedColors.YELLOW);
style.setHeight(900);
style.setComment("Москва красная");
// Атрибут значения задается самостоятельно
int index = rowIndex + 1;
return "=J" + index + "+K" + index;
}
return val;
}).done()
.field("createTime")
// Область одинакова, объединяем текущий столбец
.mergerRepeat("areaName")
// Форматирование, формат ячейки, подробнее см. этот класс или таблицу Excel. org.apache.poi.ss.usermodel.BuiltinFormats
.pattern("yyyy-MM-dd")
// Выравнивание слева
.align(HorizontalAlignment.LEFT)
// Центрирование
.valign(VerticalAlignment.CENTER)
// Жёлтый фон
.backColor(IndexedColors.YELLOW)
// Золотой шрифт
.color(IndexedColors.GOLD).done()
.fields("leader", "scount")
.field("avg").pattern("0.00").done()
.done()
// Подвал страницы
.opsFooter()
// Текстовое объединение, объединение строки подвала, номер строки начинается с 1, автоматически вычисляет количество данных
.text("Итого:", "A1:H1")
// Применение формул
.text(String.format("=SUM(J3:J%s)", 2 + data.size()), "1,1,J,J")
.text(String.format("=AVERAGE(K3:K%s)", 2 + data.size()), "1,1,K,K")
// Объединение координат
.text("Автор:625", 0, 0, 8, 8).done()
.done()
// Выполнение экспорта
.export("src/test/java/excel/export/excel/simpleExport2.xlsx");
```* Экспортированный результат
# Сложная шапка
* Пример кода```java
ExcelHelper.opsExport(PoiWorkbookType.XLSX)
.opsSheet(data)
.autoNum()
.opsHeader()
// Не замораживать шапку, по умолчанию она заморожена
.noFreeze()
// Сложная модель шапки, поддерживающая три способа объединения, 1 - координаты цифр, 2 - буквенная система координат, 3 - координаты Excel
.complex()
// Координаты Excel
.text("Проектные ресурсы", "A1:K1")
// Буквенная система координат
.text("Номер", "2,3,A,A")
// Координаты цифр
.text("Основная информация", 1, 1, 1, 4)
.text("Название проекта", "3,3,B,B")
.text("Регион", "3,3,C,C")
.text("Штат", "3,3,D,D")
.text("Город", "3,3,E,E")
.text("Ответственный за проект", "2,3,F,F")
.text("Лидер проекта в городе", "2,3,G,G")
.text("Оценочное значение", "2,2,H,I")
.text("Балл", "3,3,H,H")
.text("Средний балл", "3,3,I,I")
.text("Фотография проекта", "2,3,K,K")
.text("Дата создания", "2,3,J,J")
.done()
.opsColumn()
.fields("projectName", "areaName", "province", "city", "people", "leader", "scount", "avg", "img", "createTime")
.done()
.opsFooter()
// Подвал таблицы с суммой, вертикальные координаты начинаются с 1, автоматически вычисляет высоту строки данных! Внимание! Внимание! Внимание!
.text("=SUM(H4:H13)", "D1:K2")
.text("=SUM(H4:H13)", 0, 1, 3, 10)
.done()
// Настройка объединения ячеек
.mergeCell("F4:G13")
Здесь текст внутри метода text
был переведён на русский язык, сохранив остальной код без изменений. // Добавление изображения в указанной области
.addImage(imageParseBytes(new File("C:\Users\35361\Documents\code\self\poi-excel\src\test\java\excel\export\data\1.jpg")), "F4:G13")
.done()
.export("src/test/java/excel/export/excel/complexExport.xlsx");* Экспортированный результат
ExcelHelper.opsExport(PoiWorkbookType.XLSX)
.opsSheet(complexData)
.opsHeader().simple().texts("Имя студента", "Класс", "Школа", "Дополнительное имя родителей").done()
.opsColumn().fields("name", "classRoom.name", "classRoom.school.name", "moreInfo.parent.age").done()
.done()
.export("src/test/java/excel/export/excel/complexObject.xlsx");
ExcelHelper.opsExport(PoiWorkbookType.XLSX)
.opsSheet(Collections.emptyList())
.opsHeader().simple().texts("Имя ребенка", "Номер телефона", "Дата рождения ребенка", "Месяц жизни", "Пол ребенка", "Источник канала", "Примечание").done()
.opsColumn()
.field("Имя ребенка").done()
.field("Номер телефона").verifyText("11~11", "Введите номер телефона из 11 цифр!").done()
.field("Дата рождения ребенка").pattern("yyyy-MM-dd").verifyDate("2000-01-01~3000-12-31").done()
.field("Месяц жизни").width(4).verifyCustom("VALUE(F3:F6000)", "Формат месяцев: если год и месяц, то введите число месяца").done()
.field("Пол ребенка").dropdown("Мужской", "Женский").done()
.field("Источник канала").width(12).dropdown("Реклама", "Рынок").done()
.field("Примечание").done()
.done()
.done()
.export("src/test/java/excel/export/excel/templateExport.xlsx");
* Пример вывода
# Экспорт больших данных, защита от OOM
* Пример кода```java
// Объявление экспорта BIG XLSX
ExcelHelper.opsExport(PoiWorkbookType.BIG_XLSX)
.opsSheet(bigData)
.sheetName("1")
.opsHeader().simple().texts("Проектное название", "Проектное изображение", "Прикрепленная область", "Штат", "Город", "Собственник проекта", "Лидер проекта", "Оценка", "Средняя оценка", "Дата создания").done()
.opsColumn().fields("projectName", "img", "areaName", "province", "city", "people", "leader", "scount", "avg", "createTime").done()
.done()
.export("src/test/java/excel/export/excel/bigData.xlsx");
```# Чтение шаблона с заменой переменных для экспорта

* Пример кода
```java
ExcelHelper.opsReplace()
.from("src/test/java/excel/replace/replace.xlsx")
.var("projectName", "China Youth Travel Service")
.var("buildName", "Production of Pipes")
.var("sendDate", "2020-02-02")
.var("reciveSb", "Zhang San")
.var("phone", "15594980303")
.var("address", "Shaanxi Province xxxx")
.var("company", "Social Insurance Bureau")
.var("remark", "Li Si")
.replaceTo("src/test/java/excel/replace/replace2.xlsx");
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )