Одна строка кода для завершения чтения и записи JAVA EXCEL — инкапсуляция метода EasyExcel.

Java задняя часть GitHub Excel

Некоторое время назад я нашел проект Ali EasyExcel на github. Я подумал, что он довольно хорош, поэтому я написал простой метод для его инкапсуляции, чтобы для завершения импорта или экспорта Excel можно было использовать только одну функцию. Я только что обновил и исправил некоторые ошибки некоторое время назад, поэтому я поделюсь своим пакетом, пожалуйста, дайте мне больше советов.

Прикрепите исходный код:GitHub.com/Хоуи Юань/О…

EasyExcel

Адрес github EasyExcel:GitHub.com/Alibaba/EAS…Официальное введение EasyExcel:

Видно, что самой большой особенностью EasyExcel является то, что он использует меньше памяти.Конечно, его функции теперь относительно просты, и он может сталкиваться с менее сложными сценами, но базовое чтение и запись могут быть полностью удовлетворены.

1. Зависимость

Первый - добавить зависимости проекта, текущая версия 1.1.2-beta4

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>easyexcel</artifactId>
	<version>1.1.2-beta4</version>
</dependency>

2. Требуемые классы

1. ExcelUtil

Класс инструментов, вы можете напрямую вызвать метод этого класса инструментов для чтения или записи Excel.

2. ExcelListener

Класс слушателя может настроить полученные данные в соответствии с вашими потребностями и вашей собственной ситуацией.Здесь я просто добавляю данные в список.

public class ExcelListener extends AnalysisEventListener {

    //自定义用于暂时存储data。
    //可以通过实例获取该值
    private List<Object> datas = new ArrayList<>();

    /**
     * 通过 AnalysisContext 对象还可以获取当前 sheet,当前行等数据
     */
    @Override
    public void invoke(Object object, AnalysisContext context) {
        //数据存储到list,供批量处理,或后续自己业务逻辑处理。
        datas.add(object);
        //根据自己业务做处理
        doSomething(object);
    }

    private void doSomething(Object object) {
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        /*
            datas.clear();
            解析结束销毁不用的资源
         */
    }

    public List<Object> getDatas() {
        return datas;
    }

    public void setDatas(List<Object> datas) {
        this.datas = datas;
    }
}

3. ExcelWriterFactroy

Excel для экспорта нескольких листов, записи нескольких листов путем многократного вызова метода записи

4. ExcelException

Поймать соответствующее исключение

3. Читайте Excel

При чтении Excel просто позвонитеExcelUtil.readExcel()метод

@RequestMapping(value = "readExcel", method = RequestMethod.POST)
public Object readExcel(MultipartFile excel) {
    return ExcelUtil.readExcel(excel, new ImportInfo());
}

Где excel — файловый объект типа MultipartFile, а new ImportInfo() — объект сущности, отображаемый Excel, который необходимо наследоватьBaseRowModelтакие классы как:

public class ImportInfo extends BaseRowModel {
    @ExcelProperty(index = 0)
    private String name;

    @ExcelProperty(index = 1)
    private String age;

    @ExcelProperty(index = 2)
    private String email;

    /*
        作为 excel 的模型映射,需要 setter 方法
     */
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

В качестве класса сущностей сопоставления столбец, сопоставленный переменной-членом, может быть помечен аннотацией @ExcelProperty и переменной индекса, и метод установки обязателен.

4. Экспорт в Excel

1. Экспортируемый Excel имеет только один лист

просто позвониExcelUtil.writeExcelWithSheets()метод:

@RequestMapping(value = "writeExcel", method = RequestMethod.GET)
public void writeExcel(HttpServletResponse response) throws IOException {
    List<ExportInfo> list = getList();
    String fileName = "一个 Excel 文件";
    String sheetName = "第一个 sheet";

    ExcelUtil.writeExcel(response, list, fileName, sheetName, new ExportInfo());
    }

fileName и sheetName — это имя файла и имя листа файла экспорта соответственно, new ExportInfo() — это объект сопоставления экспортированных данных, а list — это экспортированные данные.

Для класса сущностей сопоставления вы можете настроить заголовок с помощью аннотации @ExcelProperty по мере необходимости.Конечно, вам также необходимо наследовать класс BaseRowModel, например:

public class ExportInfo extends BaseRowModel {
    @ExcelProperty(value = "姓名" ,index = 0)
    private String name;

    @ExcelProperty(value = "年龄",index = 1)
    private String age;

    @ExcelProperty(value = "邮箱",index = 2)
    private String email;

    @ExcelProperty(value = "地址",index = 3)
    private String address;
}

значение — имя столбца, индекс — порядковый номер столбца

Если нужно немного усложнить, можно добиться эффекта следующего рисунка:

Соответствующий класс сущности записывается следующим образом:

public class MultiLineHeadExcelModel extends BaseRowModel {

    @ExcelProperty(value = {"表头1","表头1","表头31"},index = 0)
    private String p1;

    @ExcelProperty(value = {"表头1","表头1","表头32"},index = 1)
    private String p2;

    @ExcelProperty(value = {"表头3","表头3","表头3"},index = 2)
    private int p3;

    @ExcelProperty(value = {"表头4","表头4","表头4"},index = 3)
    private long p4;

    @ExcelProperty(value = {"表头5","表头51","表头52"},index = 4)
    private String p5;

    @ExcelProperty(value = {"表头6","表头61","表头611"},index = 5)
    private String p6;

    @ExcelProperty(value = {"表头6","表头61","表头612"},index = 6)
    private String p7;

    @ExcelProperty(value = {"表头6","表头62","表头621"},index = 7)
    private String p8;

    @ExcelProperty(value = {"表头6","表头62","表头622"},index = 8)
    private String p9;
}

2. Экспортированный Excel имеет несколько листов

перечислитьExcelUtil.writeExcelWithSheets()Обработайте первый лист, затем вызовитеwrite()Метод обрабатывает последующие листы по очереди и, наконец, используетfinish()метод заканчивается

public void writeExcelWithSheets(HttpServletResponse response) throws IOException {
    List<ExportInfo> list = getList();
    String fileName = "一个 Excel 文件";
    String sheetName1 = "第一个 sheet";
    String sheetName2 = "第二个 sheet";
    String sheetName3 = "第三个 sheet";

    ExcelUtil.writeExcelWithSheets(response, list, fileName, sheetName1, new ExportInfo())
                .write(list, sheetName2, new ExportInfo())
                .write(list, sheetName3, new ExportInfo())
                .finish();
}

Параметрами метода записи являются данные списка текущего листа, имя текущего листа и соответствующий класс сопоставления.