___________ .__ _____ ____.
\_ _____/__ ___ ____ ____ | | / | | | |
| __)_\ \/ // ___\/ __ \| | / | |_ | |
| \> <\ \__\ ___/| |__/ ^ /\__| |
/_______ /__/\_ \\___ >___ >____/\____ |\________|
\/ \/ \/ \/ |__|
(Version: 3.1.0)
@ExcelField
)@ExcelField
)List<List<String>>>
)List<List<String>>>
в Excel (не требует шаблона)ReadConvertible
для преобразования данных при чтении ExcelWriteConvertible
для преобразования данных при записи в Excelcom.github.sheet.wrapper
с примерами использования @ExcelField(title = "Номер студента", порядок = 1)
private Long id;
``````java
@ExcelField(title = "Имя", порядок = 2)
private String name;
// Конвертер записи данных Student2DateConverter
@ExcelField(title = "Дата зачисления", порядок = 3, конвертерЗаписи = Student2DateConverter.class)
private Date date;
@ExcelField(title = "Класс", порядок = 4)
private Integer klass;
// Конвертер чтения данных Student2ExpelConverter
@ExcelField(title = "Отчислен ли", порядок = 5, конвертерЧтения = Student2ExpelConverter.class)
private boolean expelled;
/**
* Конвертер данных колонки "Отчислен ли" в Excel
*/
public class Student2ExpelConverter implements ReadConvertible {
@Override
public Object execRead(String object) {
return object.equals("Да");
}
}
@Test
public void excel2Object2() {
String путь = "D:\\JProject\\Excel4J\\src\\test\\resources\\students_02.xlsx";
try {
// 1)
// Без использования аннотаций, считываем содержимое Excel в объект типа List<List<String>>
List<List<String>> списки = ExcelUtils.getInstance().readExcel2List(путь, 1, 2, 0);
System.out.println("Считывание Excel в массив строк:");
for (List<String> список : списки) {
System.out.println(список);
}
} catch (Exception e) {
e.printStackTrace();
}
}
``` // 2)
// Используя аннотации, считываем содержимое Excel в объект типа List<Student2>
// Проверка конвертера чтения Student2ExpelConverter
// Аннотация `@ExcelField(title = "Отчислен ли", порядок = 5, readConverter = Student2ExpelConverter.class)`
List<Student2> студенты = ExcelUtils.getInstance().readExcel2Objects(путь, Student2.class, 0, 0);
System.out.println("Считывание Excel в массив объектов (поддерживает типы конвертации):");
for (Student2 student : студенты) {
System.out.println(student);
}
} catch (Exception e) {
e.printStackTrace();
}
}
```### 4. Чтение результатов
Чтение Excel в массив String:
[10000000000001, Zhang San, 2016/01/19, 101, Да]
[10000000000002, Li Si, 2017-11-17 10:19:10, 201, Нет]
Чтение Excel в массив объектов (поддерживает преобразование типов):
Student2{id=10000000000001, name='Zhang San', date=вт янв 19 00:00:00 MSK 2016, classes=101, expelled='true'}
Student2{id=10000000000002, name='Li Si', date=пт ноя 17 10:19:10 MSK 2017, classes=201, expelled='false'}
Student2{id=10000000000004, name='Wang Er', date=пт ноя 17 00:00:00 MSK 2017, classes=301, expelled='false'}## Четвертое. Экспорт Excel
@Test
public void testList2Excel() throws Exception {
List<List<String>> list2 = new ArrayList<>();
List<String> header = new ArrayList<>();
for (int i = 0; i < 10; i++) {
List<String> _list = new ArrayList<>();
for (int j = 0; j < 10; j++) {
_list.add(i + " -- " + j);
}
list2.add(_list);
header.add(i + "---");
}
ExcelUtils.getInstance().exportObjects2Excel(list2, header, "D:/D.xlsx");
}
/**
* Конвертор для преобразования даты при экспорте в Excel
*/
public class Student2DateConverter implements WriteConvertible {
@Override
public Object execWrite(Object object) {
Date date = (Date) object;
return DateUtils.date2Str(date, DateUtils.DATE_FORMAT_MSEC_T_Z);
}
}
// Валидация функции конвертирования данных Student2DateConverter
// Аннотация `@ExcelField(title = "Дата зачисления", порядок = 3, writeConverter = Student2DateConverter.class)`
@Test
public void testWriteConverter() throws Exception {
List<Student2> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(new Student2(10000L + i, "Студент" + i, new Date(), 201, false));
}
ExcelUtils.getInstance().exportObjects2Excel(list, Student2.class, true, "sheet0", true, "D:/D.xlsx");
}
```#### 3) Результат экспорта (скриншот)

### 3. Экспорт на основе шаблона `List<Объект>`
#### 1) Экспорт функции (/src/test/java/base/Module2Excel.java#testObject2Excel)
```java
@Test
public void testObject2Excel() throws Exception {
String tempPath = "/normal_template.xlsx";
List<Student1> list = new ArrayList<>();
list.add(new Student1("1010001", "Гайлен", "Шестой класс третий класс"));
list.add(new Student1("1010002", "Гурдан", "Первый класс третий класс"));
list.add(new Student1("1010003", "Мондо (уволен)", "Шестой класс первый класс"));
list.add(new Student1("1010004", "Робот", "Третий класс второй класс"));
list.add(new Student1("1010005", "Ораки", "Третий класс второй класс"));
list.add(new Student1("1010006", "Делей", "Четвертый класс второй класс"));
list.add(new Student1("1010007", "Куваши", "Пятый класс первый класс"));
list.add(new Student1("1010008", "Сань", "Второй класс первый класс"));
list.add(new Student1("1010009", "Лис", "Первый класс первый класс"));
Map<String, String> data = new HashMap<>();
data.put("title", "Книга учета войсковой академии");
data.put("info", "Унифицированная книга учета школы");
// Экспорт Excel на основе шаблона
ExcelUtils.getInstance().exportObjects2Excel(tempPath, 0, list, data, Student1.class, false, "D:/A.xlsx");
// Экспорт Excel без использования шаблона
ExcelUtils.getInstance().exportObjects2Excel(list, Student1.class, true, null, true, "D:/B.xlsx");
}
#### 3) Результат экспорта на основе шаблона (скриншот)
Map<String, Collection<Object.toString>>
@Test
public void testMap2Excel() throws Exception {
Map<String, List> classes = new HashMap<>();
Map<String, String> data = new HashMap<>();
data.put("title", "Книга учета войсковой академии");
data.put("info", "Унифицированная книга учета школы");
Определение | Описание | Приоритет (от большего к меньшему) |
---|---|---|
$appoint_line_style | Стиль текущей строки | 3 |
$single_line_style | Стиль нечетной строки | 2 |
$double_line_style | Стиль четной строки | 2 |
$default_style | По умолчанию стиль | 1 |
$data_index | Начальная позиция вставки данных | - |
$serial_number | Вставка маркера порядкового номера | - |
com.github.sheet.wrapper
Экспорт данных во множество листов можно выполнить, упаковав данные для экспорта в классы Wrapper пакета com.github.sheet.wrapper
.
com.github.sheet.wrapper.SimpleSheetWrapper
// Экспорт нескольких листов без шаблона и аннотаций
@Test
public void testBatchSimple2Excel() throws Exception {
// Создание данных для листов
List<SimpleSheetWrapper> list = new ArrayList<>();
for (int i = 0; i <= 2; i++) {
// Данные таблицы
List<String[]> data = new ArrayList<>();
for (int j = 0; j < 1000; j++) {
// Данные строки (в данном случае массив) также могут быть списком данных
String[] rows = new String[5];
for (int r = 0; r < 5; r++) {
rows[r] = "лист_" + i + "_строка_" + j + "_колонка_" + r;
}
data.add(rows);
}
// Данные заголовков
List<String> header = new ArrayList<>();
for (int h = 0; h < 5; h++) {
header.add("колонка_" + h);
}
list.add(new SimpleSheetWrapper(data, header, "лист_" + i));
}
ExcelUtils.getInstance().simpleSheet2Excel(list, "K.xlsx");
}
### 3. Экспорт нескольких листов без шаблона, но с использованием аннотаций
com.github.sheet.wrapper.NoTemplateSheetWrapper
// Экспорт нескольких листов без шаблона, но с использованием аннотаций
@Test
public void testBatchNoTemplate2Excel() throws Exception {
``` List<NoTemplateSheetWrapper> sheets = new ArrayList<>();
for (int s = 0; s < 3; s++) {
List<Student2> list = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
list.add(new Student2(10000L + i, "Student" + i, new Date(), 201, false));
}
sheets.add(new NoTemplateSheetWrapper(list, Student2.class, true, "лист_" + s));
}
ExcelUtils.getInstance().noTemplateSheet2Excel(sheets, "EE.xlsx");
}
com.github.sheet.wrapper.NormalSheetWrapper
// Экспорт нескольких листов с использованием шаблона и аннотаций
@Test
public void testObject2BatchSheet() throws Exception {
```mermaid
sequenceDiagram
participant Main
participant List
participant NormalSheetWrapper
participant ExcelUtils
Main->>List: Создайте список студентов
Main->>HashMap: Установите заголовок и информацию
Main->>NormalSheetWrapper: Создайте объект NormalSheetWrapper
Main->>ArrayList: Добавьте объекты NormalSheetWrapper в список
Main->>ExcelUtils: Вызовите метод normalSheet2Excel для экспорта данных в Excel
```
}
``````java
List<NormalSheetWrapper> sheets = new ArrayList<>();
for (int i = 0; i < 2; i++) {
List<Student1> list = new ArrayList<>();
list.add(new Student1("1010001", "Гайлен", "Шестой класс третий класс"));
list.add(new Student1("1010002", "Курдан", "Первый класс третий класс"));
list.add(new Student1("1010003", "Мондо (выгнан)", "Шестой класс первый класс"));
list.add(new Student1("1010004", "Робот", "Третий класс второй класс"));
list.add(new Student1("1010005", "Ораки", "Третий класс второй класс"));
list.add(new Student1("1010006", "Делей", "Четвертый класс второй класс"));
list.add(new Student1("1010007", "Гувацзи", "Пятый класс первый класс"));
list.add(new Student1("1010008", "Цзянсань", "Второй класс первый класс"));
list.add(new Student1("1010009", "Лисань", "Первый класс первый класс"));
Map<String, String> data = new HashMap<>();
data.put("title", "Справочник военного колледжа");
data.put("info", "Общие данные справочника школы");
sheets.add(new NormalSheetWrapper(i, list, data, Student1.class, false));
}
```## 1. Шаблон экспорта (скриншоты) (Примечание: Для удобства тестирования шаблоны имеют схожий внешний вид, но различаются цветами ячеек)
### 1.1 Шаблон листа 1

### 1.2 Шаблон листа 2

## 2. Результат экспорта (скриншоты)
### 2.1 Результат экспорта листа 1

### 2.2 Результат экспорта листа 2
### 2.2 Результат экспорта листа 2

```## 7. Операции с CSV-файлами (полная поддержка всех конфигураций аннотации ExcelField)
### 1. Чтение CSV-файлов на основе аннотаций
#### 1) Вызов метода
```java
// Тест чтения CSV-файла
@Test
public void testReadCSV() throws Excel4JException {
List<Student2> list = ExcelUtils.getInstance().readCSV2Objects("J.csv", Student2.class);
System.out.println(list);
}
Student2{id=1000001, name='张三', date=Wed Nov 28 15:11:12 CST 2018, classes=1, expel='false'}
Student2{id=1010002, name='古尔丹', date=Wed Nov 28 15:11:12 CST 2018, classes=2, expel='false'}
Student2{id=1010003, name='蒙多(被开除了)', date=Wed Nov 28 15:11:12 CST 2018, classes=6, expel='false'}
Student2{id=1010004, name='萝卜特', date=Wed Nov 28 15:11:12 CST 2018, classes=3, expel='false'}
Student2{id=1010005, name='奥拉基', date=Wed Nov 28 15:11:12 CST 2018, classes=4, expel='false'}
Student2{id=1010006, name='得嘞', date=Wed Nov 28 15:11:12 CST 2018, classes=4, expel='false'}
Student2{id=1010007, name='瓜娃子', date=Wed Nov 28 15:11:12 CST 2018, classes=5, expel='false'}
Student2{id=1010008, name='战三', date=Wed Nov 28 15:11:12 CST 2018, classes=4, expel='false'}
Student2{id=1010009, name='李四', date=Wed Nov 28 15:11:12 CST 2018, classes=2, expel='false'}
// Экспорт csv
@Test
public void testExport2CSV() throws Excel4JException {
``` List<Student2> list = new ArrayList<>();
list.add(new Student2(1000001L, "Зhang San", new Date(), 1, true));
list.add(new Student2(1010002L, "Gurdan", new Date(), 2, false));
list.add(new Student2(1010003L, "Meng Duo (выгнан)", new Date(), 6, true));
list.add(new Student2(1010004L, "Luobotie", new Date(), 3, false));
list.add(new Student2(1010005L, "Aolaji", new Date(), 4, false));
list.add(new Student2(1010006L, "Delai", new Date(), 4, false));
list.add(new Student2(1010007L, "Guawazi", new Date(), 5, true));
list.add(new Student2(1010008L, "Zhan San", new Date(), 4, false));
list.add(new Student2(1010009L, "Li Si", new Date(), 2, false));```markdown
## 8. Установка (JDK 1.7 и выше)
### 1) Клонирование проекта с GitHub
```bash
>> git clone https://github.com/Crab2died/Excel4J.git Excel4J
>> package.cmd
<dependency>
<groupId>com.github.crab2died</groupId>
<artifactId>Excel4J</artifactId>
<version>3.1.0</version>
</dependency>
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )