@@ -114,9 +114,8 @@ excelPlus.export(cardSecrets).writeAsFile(new File("卡密列表.xlsx"));
114
114
下面这个例子是从Excel 中读取数据到 Java List 容器,如果你想存储在 Set 里我相信你可以做到。
115
115
116
116
``` java
117
- List<CardSecret > cardList = excelPlus. read(
118
- new File (" 卡密列表.xls" ),
119
- CardSecret . class). asList();
117
+ Reader reader = Reader . create(). excelFile(new File (" 卡密列表.xlsx" ));
118
+ List<CardSecret > cardList = excelPlus. read(CardSecret . class, reader). asList();
120
119
```
121
120
122
121
没错,就是这么简单!如果有更加复杂或自定义的需求可以看下面的进阶使用。
@@ -128,9 +127,9 @@ List<CardSecret> cardList = excelPlus.read(
128
127
有时候我们需要对读取的行数据做一下过滤,这时候就可以使用 ` filter ` 函数来筛选出合适的数据项。
129
128
130
129
``` java
131
- List< CardSecret > readList = excelPlus. read(new File ( " 卡密列表.xls " ), CardSecret . class)
132
- .filter(cardSecret - > ! cardSecret. getSecret(). isEmpty())
133
- .asList();
130
+ excelPlus. read(CardSecret . class, reader )
131
+ .filter(cardSecret - > ! cardSecret. getSecret(). isEmpty())
132
+ .asList();
134
133
```
135
134
136
135
## 读取校验
@@ -140,19 +139,18 @@ List<CardSecret> readList = excelPlus.read(new File("卡密列表.xls"), CardSec
140
139
实际工作中你可能将它们交由前端处理。
141
140
142
141
``` java
143
- ExcelResult<CardSecret > result = excelPlus
144
- .read(new File (" 卡密列表.xls" ), CardSecret . class)
145
- .valid(cardSecret - > {
146
- if (cardSecret. getAmount(). doubleValue() < 20 ) {
147
- return ValidRow . fail(" 最小金额为20" );
148
- }
149
- return ValidRow . ok();
150
- }). asResult();
142
+ ReaderResult<CardSecret > result = excelPlus. read(new File (" 卡密列表.xls" ), CardSecret . class)
143
+ .valid((index, cardSecret) - > {
144
+ if (! cardSecret. getUsed()){
145
+ return ValidRow . ok();
146
+ }
147
+ return ValidRow . fail(" 已经被使用" );
148
+ });
151
149
152
150
if (! result. isValid()) {
153
151
result. errors(). forEach(System . out:: println);
154
152
} else {
155
- System . out. println(result. rows (). size());
153
+ System . out. println(result. asList (). size());
156
154
}
157
155
```
158
156
@@ -165,8 +163,11 @@ if (!result.isValid()) {
165
163
如果你对样式的操作不熟悉可以参考 POI 的列设置[ 文档] ( https://poi.apache.org/spreadsheet/quick-guide.html#Creating+Date+Cells ) 。
166
164
167
165
``` java
166
+ // 构建数据
168
167
List<CardSecret > cardSecrets = this . buildCardSecrets();
169
- excelPlus. export(Exporter . create(cardSecrets). headerStyle(workbook - > {
168
+
169
+ Exporter<CardSecret > exporter = Exporter . create(cardSecrets);
170
+ exporter. headerStyle(workbook - > {
170
171
CellStyle headerStyle = workbook. createCellStyle();
171
172
headerStyle. setAlignment(HorizontalAlignment . LEFT );
172
173
@@ -178,15 +179,19 @@ excelPlus.export(Exporter.create(cardSecrets).headerStyle(workbook -> {
178
179
headerFont. setBold(true );
179
180
headerStyle. setFont(headerFont);
180
181
return headerStyle;
181
- })). writeAsFile(new File (" 卡密列表.xls" ));
182
+ });
183
+
184
+ excelPlus. export(exporter)
185
+ .writeAsFile(new File (" 卡密列表.xlsx" ));
182
186
```
183
187
184
188
## 浏览器下载
185
189
186
190
为了方便我们将数据库查询的数据直接输出到浏览器弹出下载,` excel-plus ` 也做了一点 _ 手脚_ 让你一行代码就可以搞定。
187
191
188
192
``` java
189
- excelPlus. export(data). writeAsResponse(ResponseWrapper . create(servletResponse, " xxx表格.xls" ));
193
+ excelPlus. export(exporter)
194
+ .writeAsResponse(ResponseWrapper . create(servletResponse, " xxx表格.xls" ))
190
195
```
191
196
192
197
只需要将 ` HttpServletResponse ` 对象传入,并输入导出的文件名称,其他的都见鬼去吧。
@@ -209,22 +214,22 @@ excelPlus.export(Exporter.create(cardSecrets).byTemplate("tpl.xls")).writeAsFile
209
214
210
215
- ` ExcelPlus ` : 用于操作读取或导出 Excel 文档的类
211
216
- ` Converter ` : 数据类型转换的顶层接口
212
- - ` ExcelResult ` : 当校验数据时候用于存储返回的错误消息和 ` List ` 数据
217
+ - ` ReaderResult ` : 存储读取到的列表,包含校验不通过的消息
213
218
- ` Exporter ` : 用于存储导出 Excel 文档时的配置,如样式、模板位置等
214
219
215
220
## 注解使用
216
221
217
222
该项目中有 4 个注解,分别是 ` ExcelField ` 、` ExcelSheet ` 、` ReadField ` 、` WriteField ` 。
218
- 正常情况下你只会用到第一个注解,下面先来解释一下 ` @ExcelField ` 。
223
+ 正常情况下你只会用到第一个注解,下面解释一下 ` @ExcelField ` 。
219
224
220
225
<b >@ExcelField 注解</b >
221
226
222
227
| 选项 | 默认值 | 描述 |
223
228
| -------------| ----------------------| --------------------------------------------------------------------|
224
- | order | -1 | 用于标识 Excel 中的列索引,从0开始,该选项适用于读取或写入Excel |
225
- | columnName | 必选 | 导出Excel时的列名称,如:状态、姓名、手机号 |
226
- | datePattern | 空 | 日期格式化的pattern ,对 Date、 LocalDate、 LocalDateTime 生效 |
227
- | convertType | EmptyConverter.class | 数据类型转换的类Class,实现自Converter接口 ,实现类需有无参构造函数 |
229
+ | ` order ` | -1 | 用于标识 Excel 中的列索引,从 0 开始,该选项适用于读取或写入 Excel |
230
+ | ` columnName ` | 必选 | 导出Excel时的列名称,如:状态、姓名、手机号 |
231
+ | ` datePattern ` | 空 | 日期格式化的 ` pattern ` ,对 ` Date ` 、 ` LocalDate ` 、 ` LocalDateTime ` 生效 |
232
+ | ` convertType ` | ` EmptyConverter.class ` | 数据类型转换的类 Class,实现自 Converter 接口 ,实现类需有无参构造函数 |
228
233
229
234
> ` @ReadField ` 和 ` @WriteField ` 是针对读取和写入的顺序不一致、日期格式不一致时的覆盖型注解,一般用不到。
230
235
0 commit comments