diff --git a/img/readme/quickstart/write/complexHeadWrite.png b/img/readme/quickstart/write/complexHeadWrite.png new file mode 100644 index 00000000..f7a154bb Binary files /dev/null and b/img/readme/quickstart/write/complexHeadWrite.png differ diff --git a/img/readme/quickstart/write/converterWrite.png b/img/readme/quickstart/write/converterWrite.png new file mode 100644 index 00000000..0c82fc61 Binary files /dev/null and b/img/readme/quickstart/write/converterWrite.png differ diff --git a/img/readme/quickstart/write/indexWrite.png b/img/readme/quickstart/write/indexWrite.png new file mode 100644 index 00000000..c73705de Binary files /dev/null and b/img/readme/quickstart/write/indexWrite.png differ diff --git a/img/readme/quickstart/write/mergeWrite.png b/img/readme/quickstart/write/mergeWrite.png new file mode 100644 index 00000000..8e741245 Binary files /dev/null and b/img/readme/quickstart/write/mergeWrite.png differ diff --git a/img/readme/quickstart/write/repeatedWrite.png b/img/readme/quickstart/write/repeatedWrite.png new file mode 100644 index 00000000..17c521f9 Binary files /dev/null and b/img/readme/quickstart/write/repeatedWrite.png differ diff --git a/img/readme/quickstart/write/simpleWrite.png b/img/readme/quickstart/write/simpleWrite.png new file mode 100644 index 00000000..d28bdef3 Binary files /dev/null and b/img/readme/quickstart/write/simpleWrite.png differ diff --git a/img/readme/quickstart/write/styleWrite.png b/img/readme/quickstart/write/styleWrite.png new file mode 100644 index 00000000..f4582b0b Binary files /dev/null and b/img/readme/quickstart/write/styleWrite.png differ diff --git a/img/readme/quickstart/write/tableWrite.png b/img/readme/quickstart/write/tableWrite.png new file mode 100644 index 00000000..36a296a4 Binary files /dev/null and b/img/readme/quickstart/write/tableWrite.png differ diff --git a/img/readme/quickstart/write/templateWrite.png b/img/readme/quickstart/write/templateWrite.png new file mode 100644 index 00000000..71bf0275 Binary files /dev/null and b/img/readme/quickstart/write/templateWrite.png differ diff --git a/img/readme/quickstart/write/widthAndHeightWrite.png b/img/readme/quickstart/write/widthAndHeightWrite.png new file mode 100644 index 00000000..24c870a0 Binary files /dev/null and b/img/readme/quickstart/write/widthAndHeightWrite.png differ diff --git a/quickstart.md b/quickstart.md index a81a8e31..030a80a5 100644 --- a/quickstart.md +++ b/quickstart.md @@ -3,27 +3,31 @@ ### 读 DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/demo/read/ReadTest.java](/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java) * [最简单的读](#simpleRead) - +* [指定列的下标或者列名](#indexOrNameRead) +* [读多个sheet](#repeatedRead) +* [日期、数字或者自定义格式转换](#converterRead) +* [多行头](#complexHeaderRead) +* [同步的返回](#synchronousRead) +* [web中的读](#webRead) ### 写 - -## *读任意大小的03、07版Excel不会OO]
-## *读Excel自动通过注解,把结果映射为java模型
-## *读Excel支持多sheet
-## *读Excel时候是否对Excel内容做trim()增加容错
-## *写小量数据的03版Excel(不要超过2000行)
-## *写任意大07版Excel不会OOM
-## *写Excel通过注解将表头自动写入Excel
-## *写Excel可以自定义Excel样式 如:字体,加粗,表头颜色,数据内容颜色
-## *写Excel到多个不同sheet
-## *写Excel时一个sheet可以写多个Table
-## *写Excel时候自定义是否需要写表头
- +DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java](/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java) +* [最简单的写](#simpleWrite) +* [指定写入的列](#indexWrite) +* [复杂头写入](#complexHeadWrite) +* [重复多次写入](#repeatedWrite) +* [日期、数字或者自定义格式转换](#converterWrite) +* [根据模板写入](#templateWrite) +* [列宽、行高](#widthAndHeightWrite) +* [自定义样式](#styleWrite) +* [合并单元格](#mergeWrite) +* [使用table去写入](#tableWrite) +* [web中的写](#webWrite) ## 读excel样例 ### 最简单的读 -#### excel示例 +##### excel示例 ![img](img/readme/quickstart/read/demo.png) -#### 对象 +##### 对象 ```java @Data public class DemoData { @@ -32,7 +36,7 @@ public class DemoData { private Double doubleData; } ``` -#### 监听器 +##### 监听器 ```java public class DemoDataListener extends AnalysisEventListener { private static final Logger LOGGER = LoggerFactory.getLogger(DemoDataListener.class); @@ -67,7 +71,7 @@ public class DemoDataListener extends AnalysisEventListener { } } ``` -#### 代码 +##### 代码 ```java /** * 最简单的读 @@ -92,10 +96,10 @@ public class DemoDataListener extends AnalysisEventListener { } ``` -### 指定列的下标或者列名 -#### excel示例 +### 指定列的下标或者列名 +##### excel示例 参照:[excel示例](#simpleReadExcel) -#### 对象 +##### 对象 ```java @Data public class IndexOrNameData { @@ -113,9 +117,9 @@ public class IndexOrNameData { private Date date; } ``` -#### 监听器 +##### 监听器 参照:[监听器](#simpleReadListener) 只是泛型变了而已 -#### 代码 +##### 代码 ```java /** * 指定列的下标或者列名 @@ -132,14 +136,14 @@ public class IndexOrNameData { } ``` -### 读多个sheet -#### excel示例 +### 读多个sheet +##### excel示例 参照:[excel示例](#simpleReadExcel) -#### 对象 +##### 对象 参照:[对象](#simpleReadObject) -#### 监听器 +##### 监听器 参照:[监听器](#simpleReadListener) -#### 代码 +##### 代码 ```java /** * 读多个sheet,这里注意一个sheet不能读取多次,一定要多次需要重新读取文件 @@ -160,10 +164,10 @@ public class IndexOrNameData { } ``` -### 日期、数字或者自定义格式转换 -#### excel示例 +### 日期、数字或者自定义格式转换 +##### excel示例 参照:[excel示例](#simpleReadExcel) -#### 对象 +##### 对象 ```java @Data public class ConverterData { @@ -184,9 +188,9 @@ public class ConverterData { private String doubleData; } ``` -#### 监听器 +##### 监听器 参照:[监听器](#simpleReadListener) 只是泛型变了 -#### 自定义转换器 +##### 自定义转换器 ````java public class CustomStringStringConverter implements Converter { @Override @@ -235,7 +239,7 @@ public class CustomStringStringConverter implements Converter { } ```` -#### 代码 +##### 代码 ```java /** * 日期、数字或者自定义格式转换 @@ -258,14 +262,14 @@ public class CustomStringStringConverter implements Converter { } ``` -### 多行头 -#### excel示例 +### 多行头 +##### excel示例 参照:[excel示例](#simpleReadExcel) -#### 对象 +##### 对象 参照:[对象](#simpleReadObject) -#### 监听器 +##### 监听器 参照:[监听器](#simpleReadListener) -#### 代码 +##### 代码 ```java /** * 多行头 @@ -285,12 +289,12 @@ public class CustomStringStringConverter implements Converter { } ``` -### 同步的返回 -#### excel示例 +### 同步的返回 +##### excel示例 参照:[excel示例](#simpleReadExcel) -#### 对象 +##### 对象 参照:[对象](#simpleReadObject) -#### 代码 +##### 代码 ```java /** * 同步的返回,不推荐使用,如果数据量大会把数据放到内存里面 @@ -315,6 +319,405 @@ public class CustomStringStringConverter implements Converter { } ``` +### web中的读 +##### 示例代码 +DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java](/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java) +##### excel示例 +参照:[excel示例](#simpleReadExcel) +##### 对象 +参照:[对象](#simpleReadObject) 只是名字变了 +##### 监听器 +参照:[监听器](#simpleReadListener) 只是泛型变了 +##### 代码 +```java + /** + * 文件上传 + *
  • 1. 创建excel对应的实体对象 参照{@link UploadData} + *
  • 2. 由于默认异步读取excel,所以需要创建excel一行一行的回调监听器,参照{@link UploadDataListener} + *
  • 3. 直接读即可 + */ + @PostMapping("upload") + @ResponseBody + public String upload(MultipartFile file) throws IOException { + EasyExcelFactory.read(file.getInputStream(), UploadData.class, new UploadDataListener()).sheet().doRead(); + return "success"; + } +``` + +## 写excel样例 +### 通用数据生成 后面不会重复写 +```java + private List data() { + List list = new ArrayList(); + for (int i = 0; i < 10; i++) { + DemoData data = new DemoData(); + data.setString("字符串" + i); + data.setDate(new Date()); + data.setDoubleData(0.56); + list.add(data); + } + return list; + } +``` +### 最简单的写 +##### excel示例 +![img](img/readme/quickstart/write/simpleWrite.png) +##### 对象 +```java +@Data +public class DemoData { + @ExcelProperty("字符串标题") + private String string; + @ExcelProperty("日期标题") + private Date date; + @ExcelProperty("数字标题") + private Double doubleData; +} +``` +##### 代码 +```java + /** + * 最简单的写 + *
  • 1. 创建excel对应的实体对象 参照{@link DemoData} + *
  • 2. 直接写即可 + */ + @Test + public void simpleWrite() { + // 写法1 + String fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + // 如果这里想使用03 则 传入excelType参数即可 + EasyExcelFactory.write(fileName, DemoData.class).sheet("模板").doWrite(data()); + + // 写法2 + fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去读 + ExcelWriter excelWriter = EasyExcelFactory.write(fileName, DemoData.class).build(); + WriteSheet writeSheet = EasyExcelFactory.writerSheet("模板").build(); + excelWriter.write(data(), writeSheet); + /// 千万别忘记finish 会帮忙关闭流 + excelWriter.finish(); + } +``` + +### 指定写入的列 +##### excel示例 +![img](img/readme/quickstart/write/indexWrite.png) +##### 对象 +```java +@Data +public class IndexData { + @ExcelProperty(value = "字符串标题", index = 0) + private String string; + @ExcelProperty(value = "日期标题", index = 1) + private Date date; + /** + * 这里设置3 会导致第二列空的 + */ + @ExcelProperty(value = "数字标题", index = 3) + private Double doubleData; +} +``` +##### 代码 +```java + /** + * 指定写入的列 + *
  • 1. 创建excel对应的实体对象 参照{@link IndexData} + *
  • 2. 使用{@link ExcelProperty}注解指定写入的列 + *
  • 3. 直接写即可 + */ + @Test + public void indexWrite() { + String fileName = TestFileUtil.getPath() + "indexWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcelFactory.write(fileName, IndexData.class).sheet("模板").doWrite(data()); + } +``` + +### 复杂头写入 +##### excel示例 +![img](img/readme/quickstart/write/complexHeadWrite.png) +##### 对象 +```java +@Data +public class ComplexHeadData { + @ExcelProperty({"主标题", "字符串标题"}) + private String string; + @ExcelProperty({"主标题", "日期标题"}) + private Date date; + @ExcelProperty({"主标题", "数字标题"}) + private Double doubleData; +} +``` +##### 代码 +```java + /** + * 复杂头写入 + *
  • 1. 创建excel对应的实体对象 参照{@link ComplexHeadData} + *
  • 2. 使用{@link ExcelProperty}注解指定复杂的头 + *
  • 3. 直接写即可 + */ + @Test + public void complexHeadWrite() { + String fileName = TestFileUtil.getPath() + "complexHeadWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcelFactory.write(fileName, ComplexHeadData.class).sheet("模板").doWrite(data()); + } +``` + +### 重复多次写入 +##### excel示例 +![img](img/readme/quickstart/write/repeatedWrite.png) +##### 对象 +参照:[对象](#simpleWriteObject) +##### 代码 +```java + /** + * 重复多次写入 + *
  • 1. 创建excel对应的实体对象 参照{@link ComplexHeadData} + *
  • 2. 使用{@link ExcelProperty}注解指定复杂的头 + *
  • 3. 直接调用二次写入即可 + */ + @Test + public void repeatedWrite() { + String fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去读 + ExcelWriter excelWriter = EasyExcelFactory.write(fileName, DemoData.class).build(); + WriteSheet writeSheet = EasyExcelFactory.writerSheet("模板").build(); + // 第一次写入会创建头 + excelWriter.write(data(), writeSheet); + // 第二次写入会在上一次写入的最后一行后面写入 + excelWriter.write(data(), writeSheet); + /// 千万别忘记finish 会帮忙关闭流 + excelWriter.finish(); + } +``` + +### 日期、数字或者自定义格式转换 +##### excel示例 +![img](img/readme/quickstart/write/converterWrite.png) +##### 对象 +```java +@Data +public class ConverterData { + /** + * 我想所有的 字符串起前面加上"自定义:"三个字 + */ + @ExcelProperty(value = "字符串标题", converter = CustomStringStringConverter.class) + private String string; + /** + * 我想写到excel 用年月日的格式 + */ + @DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒") + @ExcelProperty("日期标题") + private Date date; + /** + * 我想写到excel 用百分比表示 + */ + @NumberFormat("#.##%") + @ExcelProperty(value = "数字标题") + private Double doubleData; +} +``` +##### 代码 +```java + /** + * 日期、数字或者自定义格式转换 + *
  • 1. 创建excel对应的实体对象 参照{@link ConverterData} + *
  • 2. 使用{@link ExcelProperty}配合使用注解{@link DateTimeFormat}、{@link NumberFormat}或者自定义注解 + *
  • 3. 直接写即可 + */ + @Test + public void converterWrite() { + String fileName = TestFileUtil.getPath() + "converterWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcelFactory.write(fileName, ConverterData.class).sheet("模板").doWrite(data()); + } +``` + +### 根据模板写入 +##### 模板excel示例 +参照:[模板excel示例](#simpleReadExcel) +##### excel示例 +![img](img/readme/quickstart/write/templateWrite.png) +##### 对象 +参照:[对象](#simpleWriteObject) +##### 代码 +```java + /** + * 根据模板写入 + *
  • 1. 创建excel对应的实体对象 参照{@link IndexData} + *
  • 2. 使用{@link ExcelProperty}注解指定写入的列 + *
  • 3. 使用withTemplate 读取模板 + *
  • 4. 直接写即可 + */ + @Test + public void templateWrite() { + String templateFileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + String fileName = TestFileUtil.getPath() + "templateWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcelFactory.write(fileName, DemoData.class).withTemplate(templateFileName).sheet().doWrite(data()); + } +``` + +### 列宽、行高 +##### excel示例 +![img](img/readme/quickstart/write/widthAndHeightWrite.png) +##### 对象 +````java +@Data +@ContentRowHeight(10) +@HeadRowHeight(20) +@ColumnWidth(25) +public class WidthAndHeightData { + @ExcelProperty("字符串标题") + private String string; + @ExcelProperty("日期标题") + private Date date; + /** + * 宽度为50 + */ + @ColumnWidth(50) + @ExcelProperty("数字标题") + private Double doubleData; +} +```` +##### 代码 +```java + /** + * 列宽、行高 + *
  • 1. 创建excel对应的实体对象 参照{@link WidthAndHeightData} + *
  • 2. 使用注解{@link ColumnWidth}、{@link HeadRowHeight}、{@link ContentRowHeight}指定宽度或高度 + *
  • 3. 直接写即可 + */ + @Test + public void widthAndHeightWrite() { + String fileName = TestFileUtil.getPath() + "widthAndHeightWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcelFactory.write(fileName, WidthAndHeightData.class).sheet("模板").doWrite(data()); + } +``` + +### 自定义样式 +##### excel示例 +![img](img/readme/quickstart/write/styleWrite.png) +##### 对象 +参照:[对象](#simpleWriteObject) +##### 代码 +```java + /** + * 自定义样式 + *
  • 1. 创建excel对应的实体对象 参照{@link DemoData} + *
  • 2. 创建一个style策略 并注册 + *
  • 3. 直接写即可 + */ + @Test + public void styleWrite() { + String fileName = TestFileUtil.getPath() + "styleWrite" + System.currentTimeMillis() + ".xlsx"; + // 头的策略 + WriteCellStyle headWriteCellStyle = new WriteCellStyle(); + // 背景设置为红色 + headWriteCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex()); + WriteFont headWriteFont = new WriteFont(); + headWriteFont.setFontHeightInPoints((short)20); + headWriteCellStyle.setWriteFont(headWriteFont); + // 内容的策略 + WriteCellStyle contentWriteCellStyle = new WriteCellStyle(); + // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定 + contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND); + // 背景绿色 + contentWriteCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex()); + WriteFont contentWriteFont = new WriteFont(); + // 字体大小 + contentWriteFont.setFontHeightInPoints((short)20); + contentWriteCellStyle.setWriteFont(contentWriteFont); + // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现 + HorizontalCellStyleStrategy horizontalCellStyleStrategy = + new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle); + + // 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcelFactory.write(fileName, DemoData.class).registerWriteHandler(horizontalCellStyleStrategy).sheet("模板") + .doWrite(data()); + } +``` + +### 合并单元格 +##### excel示例 +![img](img/readme/quickstart/write/mergeWrite.png) +##### 对象 +参照:[对象](#simpleWriteObject) +##### 代码 +```java + /** + * 合并单元格 + *
  • 1. 创建excel对应的实体对象 参照{@link DemoData} + *
  • 2. 创建一个merge策略 并注册 + *
  • 3. 直接写即可 + */ + @Test + public void mergeWrite() { + String fileName = TestFileUtil.getPath() + "mergeWrite" + System.currentTimeMillis() + ".xlsx"; + // 每隔2行会合并 把eachColumn 设置成 3 也就是我们数据的长度,所以就第一列会合并。当然其他合并策略也可以自己写 + LoopMergeStrategy loopMergeStrategy = new LoopMergeStrategy(2, 0); + // 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcelFactory.write(fileName, DemoData.class).registerWriteHandler(loopMergeStrategy).sheet("模板") + .doWrite(data()); + } +``` + +### 使用table去写入 +##### excel示例 +![img](img/readme/quickstart/write/tableWrite.png) +##### 对象 +参照:[对象](#simpleWriteObject) +##### 代码 +```java + /** + * 使用table去写入 + *
  • 1. 创建excel对应的实体对象 参照{@link DemoData} + *
  • 2. 然后写入table即可 + */ + @Test + public void tableWrite() { + String fileName = TestFileUtil.getPath() + "tableWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里直接写多个table的案例了,如果只有一个 也可以直一行代码搞定,参照其他案例 + // 这里 需要指定写用哪个class去读 + ExcelWriter excelWriter = EasyExcelFactory.write(fileName, DemoData.class).build(); + // 把sheet设置为不需要头 不然会输出sheet的头 这样看起来第一个table 就有2个头了 + WriteSheet writeSheet = EasyExcelFactory.writerSheet("模板").needHead(Boolean.FALSE).build(); + // 这里必须指定需要头,table 会继承sheet的配置,sheet配置了不需要,table 默认也是不需要 + WriteTable writeTable0 = EasyExcelFactory.writerTable(0).needHead(Boolean.TRUE).build(); + WriteTable writeTable1 = EasyExcelFactory.writerTable(1).needHead(Boolean.TRUE).build(); + // 第一次写入会创建头 + excelWriter.write(data(), writeSheet, writeTable0); + // 第二次写如也会创建头,然后在第一次的后面写入数据 + excelWriter.write(data(), writeSheet, writeTable1); + /// 千万别忘记finish 会帮忙关闭流 + excelWriter.finish(); + } +``` + +### web中的写 +##### 示例代码 +DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java](/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java) +##### 对象 +参照:[对象](#simpleWriteObject) 就是名称变了下 +##### 代码 +```java + /** + * 文件下载 + *
  • 1. 创建excel对应的实体对象 参照{@link DownloadData} + *
  • 2. 设置返回的 参数 + *
  • 3. 直接写,这里注意,finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大 + */ + @GetMapping("download") + public void download(HttpServletResponse response) throws IOException { + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + response.setHeader("Content-disposition", "attachment;filename=demo.xlsx"); + EasyExcelFactory.write(response.getOutputStream(), DownloadData.class).sheet("模板").doWrite(data()); + } +``` ## 测试数据分析 ![POI usermodel PK easyexcel(Excel 2003).png](http://ata2-img.cn-hangzhou.img-pub.aliyun-inc.com/02c4bfbbab99a649788523d04f84a42f.png) ![POI usermodel PK easyexcel(Excel 2007).png](http://ata2-img.cn-hangzhou.img-pub.aliyun-inc.com/f6a8a19ec959f0eb564e652de523fc9e.png) diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java b/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java index c3c19ad0..0888b36c 100644 --- a/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java +++ b/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java @@ -70,7 +70,7 @@ public class WriteTest { } /** - * 复杂头写入 指定写入的列 + * 复杂头写入 *
  • 1. 创建excel对应的实体对象 参照{@link ComplexHeadData} *
  • 2. 使用{@link ExcelProperty}注解指定复杂的头 *
  • 3. 直接写即可 @@ -100,11 +100,10 @@ public class WriteTest { excelWriter.write(data(), writeSheet); /// 千万别忘记finish 会帮忙关闭流 excelWriter.finish(); - } /** - * 日期、数字或者自定义格式转换。 + * 日期、数字或者自定义格式转换 *
  • 1. 创建excel对应的实体对象 参照{@link ConverterData} *
  • 2. 使用{@link ExcelProperty}配合使用注解{@link DateTimeFormat}、{@link NumberFormat}或者自定义注解 *
  • 3. 直接写即可 @@ -117,7 +116,7 @@ public class WriteTest { } /** - * 指定写入的列 + * 根据模板写入 *
  • 1. 创建excel对应的实体对象 参照{@link IndexData} *
  • 2. 使用{@link ExcelProperty}注解指定写入的列 *
  • 3. 使用withTemplate 读取模板 @@ -217,7 +216,6 @@ public class WriteTest { excelWriter.write(data(), writeSheet, writeTable1); /// 千万别忘记finish 会帮忙关闭流 excelWriter.finish(); - } private List data() {