jinlin
2024-01-31 9025b9cf7ec8610003d445a31d93e35e7bd73c2e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
package com.zt.modules.sample.controller;
 
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.zt.common.servlet.Result;
import com.zt.common.utils.ExcelUtils;
import com.zt.modules.sample.excel.MultipleHeaderExcel;
import com.zt.modules.sample.excel.SampleExcel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
 
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
/**
 * 示例
 *
 * @author hehz
 */
@RestController
@RequestMapping("/sample")
@Api(value = "示例", tags = "示例")
public class SampleController {
 
    /**
     * 导入参考https://www.yuque.com/easyexcel/doc/read
     *
     * @param file
     * @return
     * @throws IOException
     */
    @PostMapping("excel/import")
    @ApiOperation("Excel导入")
    public Result excelImport(MultipartFile file) throws IOException {
        EasyExcel.read(file.getInputStream(), SampleExcel.class, new AnalysisEventListener<SampleExcel>() {
            private List<SampleExcel> list = new ArrayList<>();
 
            @Override
            public void invoke(SampleExcel excel, AnalysisContext analysisContext) {
                // 解析每一条
                list.add(excel);
            }
 
            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                // 保存数据库
                System.out.println(list.size());
            }
        }).sheet().doRead();
 
        return Result.ok("这是测试成功返回结果");
    }
 
    @PostMapping("multiple/header/excel/import")
    @ApiOperation("多表头Excel导入")
    public Result excelImport2(MultipartFile file) throws IOException {
        EasyExcel
                .read(file.getInputStream(), MultipleHeaderExcel.class,
                        new AnalysisEventListener<MultipleHeaderExcel>() {
                            private List<MultipleHeaderExcel> list = new ArrayList<>();
 
                            @Override
                            public void invoke(MultipleHeaderExcel excel, AnalysisContext analysisContext) {
                                // 解析每一条
                                list.add(excel);
                            }
 
                            @Override
                            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                                // 保存数据库
                                System.out.println(list.size());
                            }
                        }).sheet().headRowNumber(2).doRead();
 
        return Result.ok();
    }
 
    @PostMapping("multiple/sheet/excel/import")
    @ApiOperation("多sheet Excel导入")
    public Result excelImport3(MultipartFile file) throws IOException {
        ExcelReader excelReader = null;
        try {
            excelReader = EasyExcel.read(file.getInputStream()).build();
 
            ReadSheet readSheet1 = EasyExcel.readSheet(0).head(SampleExcel.class)
                    .registerReadListener(new AnalysisEventListener<SampleExcel>() {
                        private List<SampleExcel> list = new ArrayList<>();
 
                        @Override
                        public void invoke(SampleExcel excel, AnalysisContext analysisContext) {
                            // 解析每一条
                            list.add(excel);
                        }
 
                        @Override
                        public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                            // 保存数据库
                            System.out.println(list.size());
                        }
                    }).build();
 
            ReadSheet readSheet2 = EasyExcel.readSheet(1).headRowNumber(2).head(MultipleHeaderExcel.class)
                    .registerReadListener(new AnalysisEventListener<MultipleHeaderExcel>() {
                        private List<MultipleHeaderExcel> list = new ArrayList<>();
 
                        @Override
                        public void invoke(MultipleHeaderExcel excel, AnalysisContext analysisContext) {
                            // 解析每一条
                            list.add(excel);
                        }
 
                        @Override
                        public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                            // 保存数据库
                            System.out.println(list.size());
                        }
                    }).build();
            // 这里注意 一定要把sheet1 sheet2 一起传进去,不然有个问题就是03版的excel 会读取多次,浪费性能
            excelReader.read(readSheet1, readSheet2);
        } finally {
            if (excelReader != null) {
                excelReader.finish();
            }
        }
 
        EasyExcel
                .read(file.getInputStream(), MultipleHeaderExcel.class,
                        new AnalysisEventListener<MultipleHeaderExcel>() {
                            private List<MultipleHeaderExcel> list = new ArrayList<>();
 
                            @Override
                            public void invoke(MultipleHeaderExcel excel, AnalysisContext analysisContext) {
                                // 解析每一条
                                list.add(excel);
                            }
 
                            @Override
                            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                                // 保存数据库
                                System.out.println(list.size());
                            }
                        }).sheet().doRead();
 
        return Result.ok();
    }
 
    /**
     * 具体参考https://www.yuque.com/easyexcel/doc/write
     *
     * @param response
     * @throws Exception
     */
    @GetMapping("excel/export")
    @ApiOperation("Excel导出")
    public void export(HttpServletResponse response) throws Exception {
        List<SampleExcel> list = new ArrayList<>();
        list.add(new SampleExcel("1234567890", "这是测试一", "测试一", "这是Excel测试一", "ce shi 1"));
        list.add(new SampleExcel("1234567891", "这是测试二", "测试二", "这是Excel测试二", "ce shi 2"));
        list.add(new SampleExcel("1234567892", "这是测试三", "测试三", "这是Excel测试三", "ce shi 3"));
        list.add(new SampleExcel("1234567893", "这是测试四", "测试四", "这是Excel测试四", "ce shi 4"));
 
        ExcelUtils.export(response, null, list, SampleExcel.class);
    }
 
    @GetMapping("multiple/header/excel/export")
    @ApiOperation("多表头Excel导出")
    public void export2(HttpServletResponse response) throws Exception {
        List<MultipleHeaderExcel> list = new ArrayList<>();
        list.add(new MultipleHeaderExcel("1234567890", "这是测试一", "测试一", "这是Excel测试一", "ce shi 1"));
        list.add(new MultipleHeaderExcel("1234567891", "这是测试二", "测试二", "这是Excel测试二", "ce shi 2"));
        list.add(new MultipleHeaderExcel("1234567892", "这是测试三", "测试三", "这是Excel测试三", "ce shi 3"));
        list.add(new MultipleHeaderExcel("1234567893", "这是测试四", "测试四", "这是Excel测试四", "ce shi 4"));
 
        ExcelUtils.export(response, null, list, MultipleHeaderExcel.class);
    }
 
    @GetMapping("multiple/sheet/excel/export")
    @ApiOperation("多sheet Excel导出")
    public void export3(HttpServletResponse response) throws Exception {
        List<SampleExcel> list = new ArrayList<>();
        list.add(new SampleExcel("1234567890", "这是测试一", "测试一", "这是Excel测试一", "ce shi 1"));
        list.add(new SampleExcel("1234567891", "这是测试二", "测试二", "这是Excel测试二", "ce shi 2"));
        list.add(new SampleExcel("1234567892", "这是测试三", "测试三", "这是Excel测试三", "ce shi 3"));
        list.add(new SampleExcel("1234567893", "这是测试四", "测试四", "这是Excel测试四", "ce shi 4"));
 
        List<MultipleHeaderExcel> list2 = new ArrayList<>();
        list2.add(new MultipleHeaderExcel("1234567890", "这是测试一", "测试一", "这是Excel测试一", "ce shi 1"));
        list2.add(new MultipleHeaderExcel("1234567891", "这是测试二", "测试二", "这是Excel测试二", "ce shi 2"));
        list2.add(new MultipleHeaderExcel("1234567892", "这是测试三", "测试三", "这是Excel测试三", "ce shi 3"));
        list2.add(new MultipleHeaderExcel("1234567893", "这是测试四", "测试四", "这是Excel测试四", "ce shi 4"));
 
        ExcelUtils.export(response, null, new String[] { "普通", "多表头" }, new List[] { list, list2 });
    }
}