1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Crab2Died-Excel4J

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md
                            ___________                   .__      _____      ____.
                            \_   _____/__  ___ ____  ____ |  |    /  |  |    |    |
                             |    __)_\  \/  // ___\/ __ \|  |   /   |  |_   |    |
                             |        \>    <\  \__\  ___/|  |__/    ^   /\__|    |
                            /_______  /__/\_ \\___  >___  >____/\____   |\________|
                                    \/      \/    \/    \/           |__|          
                                                                   (Version: 3.1.0)

Version License Maven Central Javadoc

1. История обновлений

1. v3.x

  1. Добавлена поддержка экспорта CSV (включая аннотацию @ExcelField)
  2. Добавлена поддержка импорта CSV (включая аннотацию @ExcelField)
  3. Обновлена библиотека POI до версии v5.2.3
  4. Обновлена библиотека Commons CSV до версии v1.10.0### 2. v2.x
  5. Поддержка преобразования типов при чтении Excel (например, в Integer, Long, Date (частично)) вместо конвертации всего содержимого в String
  6. Поддержка незакомментированного чтения данных Excel (содержимое хранится в объектах типа List<List<String>>>)
  7. Поддержка экспорта данных типа List<List<String>>> в Excel (не требует шаблона)
  8. Добавлена возможность отображения стилей данных Map с использованием шаблонов (каждому ключу можно назначить стиль, определяемый как &key, стиль экспорта данных Map будет связан с значением ключа)
  9. Добавлен интерфейс ReadConvertible для преобразования данных при чтении Excel
  10. Добавлен интерфейс WriteConvertible для преобразования данных при записи в Excel
  11. Поддержка однокнопочного экспорта нескольких листов, подробнее см. пакет com.github.sheet.wrapper с примерами использования
  12. Устранена проблема изменения шаблона при указании абсолютного пути шаблона для экспорта, а также исправлена проблема изменения исходного файла Excel при чтении данных, рекомендован переход на версию 2.1.4-Final2
  13. Устранены известные ошибки и проведена оптимизация кода и комментариев

2. Базовый аннотированный класс (/src/test/java/modules/Student2.java)

    @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;

3. Чтение Excel с быстрой реализацией

1. Данные для чтения из Excel (скриншот)

Данные для чтения из Excel (скриншot)

2. Конвертер чтения (/src/test/java/converter/Student2ExpelConverter.java)

    /**
     * Конвертер данных колонки "Отчислен ли" в Excel
     */
    public class Student2ExpelConverter implements ReadConvertible {

        @Override
        public Object execRead(String object) {

            return object.equals("Да");
        }
    }

3. Функция чтения (/src/test/java/base/Excel2Module.java#excel2Object2)

    @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

1. Быстрый экспорт без использования шаблона

1) Функция экспорта (/src/test/java/base/Module2Excel.java#testList2Excel)

    @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");
    }

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

2. Экспорт с использованием функции конвертирования данных при записи

1) Конвертор (/src/test/java/converter/Student2DateConverter.java)

    /**
     * Конвертор для преобразования даты при экспорте в 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);
        }
    }

2) Функция экспорта (/src/test/java/base/Module2Excel.java#testWriteConverter)

    // Валидация функции конвертирования данных 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) Результат экспорта (скриншот)
![Скриншот экспорта данных](https://raw.githubusercontent.com/Crab2died/Excel4J/master/src/test/resources/image/v2.0.0/converter_export.png)

### 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");

    }

2) Шаблон экспорта (скриншот)

Шаблон экспорта скриншот#### 3) Результат экспорта на основе шаблона (скриншот) Результат экспорта на основе шаблона

4) Результат экспорта без использования шаблона (скриншот)

Результат экспорта без использования шаблона

4. Экспорт на основе шаблона Map<String, Collection<Object.toString>>

1) Экспорт функции (/src/test/java/base/Module2Excel.java#testMap2Excel)

    @Test
    public void testMap2Excel() throws Exception {

        Map<String, List> classes = new HashMap<>();

        Map<String, String> data = new HashMap<>();
        data.put("title", "Книга учета войсковой академии");
        data.put("info", "Унифицированная книга учета школы");

2) Шаблон экспорта (скриншот)

3) Результат экспорта (скриншот)

5. Пользовательские свойства шаблона Excel, регистронезависимость

1) Конкретные определения кода см. в (/src/main/java/com/github/crab2died/handler/HandlerConstant)

2) Пользовательские свойства шаблона Excel, регистронезависимость

Определение Описание Приоритет (от большего к меньшему)
$appoint_line_style Стиль текущей строки 3
$single_line_style Стиль нечетной строки 2
$double_line_style Стиль четной строки 2
$default_style По умолчанию стиль 1
$data_index Начальная позиция вставки данных -
$serial_number Вставка маркера порядкового номера -

1. Упаковка классов для экспорта данных во множество листов, подробнее см. в пакете com.github.sheet.wrapper

Экспорт данных во множество листов можно выполнить, упаковав данные для экспорта в классы Wrapper пакета com.github.sheet.wrapper.

2. Экспорт нескольких листов без шаблона и аннотаций com.github.sheet.wrapper.SimpleSheetWrapper

1) Вызов метода

    // Экспорт нескольких листов без шаблона и аннотаций
    @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");
    }

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

Скриншот результата экспорта### 3. Экспорт нескольких листов без шаблона, но с использованием аннотаций com.github.sheet.wrapper.NoTemplateSheetWrapper

1) Вызов метода

    // Экспорт нескольких листов без шаблона, но с использованием аннотаций
    @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");
    }

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

Скриншот результата экспорта

4. Экспорт нескольких листов с использованием шаблона и аннотаций com.github.sheet.wrapper.NormalSheetWrapper

1) Вызов метода (Примечание: Для удобства тестирования данные всех листов одинаковы)

    // Экспорт нескольких листов с использованием шаблона и аннотаций
    @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](https://raw.githubusercontent.com/Crab2died/Excel4J/master/src/test/resources/image/v2.1.4/normal_template_sheet1.png)

### 1.2 Шаблон листа 2
![Шаблон листа 2](https://raw.githubusercontent.com/Crab2died/Excel4J/master/src/test/resources/image/v2.1.4/normal_template_sheet2.png)

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

### 2.1 Результат экспорта листа 1
![Результат экспорта листа 1](https://raw.githubusercontent.com/Crab2died/Excel4J/master/src/test/resources/image/v2.1.4/normal_wrapper_sheet1.png)

### 2.2 Результат экспорта листа 2
![Результат экспорта листа 2](https://raw.githubusercontent.com/Crab2died/Excel4J/master/src/test/resources/image/v2.1.4/normal_wrapper_sheet2.png)### 2.2 Результат экспорта листа 2
![Результат экспорта листа 2](https://raw.githubusercontent.com/Crab2died/Excel4J/master/src/test/resources/image/v2.1.4/map_wrapper_sheet2.png)

```## 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);
    }

2) Результат чтения

    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'}

2. Экспорт CSV-файлов на основе аннотаций

1) Вызов метода

    // Экспорт 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

2) Включение последней версии в Maven

<dependency>
    <groupId>com.github.crab2died</groupId>
    <artifactId>Excel4J</artifactId>
    <version>3.1.0</version>
</dependency>

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления (10)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/Crab2Died-Excel4J.git
git@api.gitlife.ru:oschina-mirror/Crab2Died-Excel4J.git
oschina-mirror
Crab2Died-Excel4J
Crab2Died-Excel4J
master