Skip to content

Commit c06fa23

Browse files
wangmiscodingwangmengdelei
authored
feature: add an afterSheetDispose method to the SheetWriteHandler (#413)
* feature: add an afterSheetDispose method to the SheetWriteHandler * feature: add an afterSheetDispose method to the SheetWriteHandler * refactor(fastexcel): Adjust the code according to Spotless * refactor: Optimize class imports (#401) * Update Excel writing method in test code Replace EasyExcel.write with FastExcel.write Modify two files related to template filling and regular writing tests --------- Co-authored-by: wangmeng <[email protected]> Co-authored-by: DeleiGuo <[email protected]>
1 parent df097fa commit c06fa23

File tree

7 files changed

+105
-0
lines changed

7 files changed

+105
-0
lines changed

fastexcel/src/main/java/cn/idev/excel/util/WriteHandlerUtils.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,4 +204,12 @@ public static void afterRowDispose(RowWriteHandlerContext context) {
204204
rowHandlerExecutionChain.afterRowDispose(context);
205205
}
206206
}
207+
208+
public static void afterSheetDispose(WriteContext writeContext) {
209+
SheetWriteHandlerContext context = WriteHandlerUtils.createSheetWriteHandlerContext(writeContext);
210+
SheetHandlerExecutionChain sheetHandlerExecutionChain = getSheetHandlerExecutionChain(context, false);
211+
if (sheetHandlerExecutionChain != null) {
212+
sheetHandlerExecutionChain.afterSheetDispose(context);
213+
}
214+
}
207215
}

fastexcel/src/main/java/cn/idev/excel/write/ExcelBuilderImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import cn.idev.excel.exception.ExcelGenerateException;
77
import cn.idev.excel.support.ExcelTypeEnum;
88
import cn.idev.excel.util.FileUtils;
9+
import cn.idev.excel.util.WriteHandlerUtils;
910
import cn.idev.excel.write.executor.ExcelWriteAddExecutor;
1011
import cn.idev.excel.write.executor.ExcelWriteFillExecutor;
1112
import cn.idev.excel.write.metadata.WriteSheet;
@@ -55,6 +56,8 @@ public void addContent(Collection<?> data, WriteSheet writeSheet, WriteTable wri
5556
excelWriteAddExecutor = new ExcelWriteAddExecutor(context);
5657
}
5758
excelWriteAddExecutor.add(data);
59+
// execute callback after the sheet is written
60+
WriteHandlerUtils.afterSheetDispose(context);
5861
} catch (RuntimeException e) {
5962
finishOnException();
6063
throw e;
@@ -78,6 +81,8 @@ public void fill(Object data, FillConfig fillConfig, WriteSheet writeSheet) {
7881
excelWriteFillExecutor = new ExcelWriteFillExecutor(context);
7982
}
8083
excelWriteFillExecutor.fill(data, fillConfig);
84+
// execute callback after the sheet is written
85+
WriteHandlerUtils.afterSheetDispose(context);
8186
} catch (RuntimeException e) {
8287
finishOnException();
8388
throw e;

fastexcel/src/main/java/cn/idev/excel/write/handler/SheetWriteHandler.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,10 @@ default void afterSheetCreate(SheetWriteHandlerContext context) {
4444
* @param writeSheetHolder
4545
*/
4646
default void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {}
47+
48+
/**
49+
* Called after all operations on the sheet have been completed
50+
* @param context
51+
*/
52+
default void afterSheetDispose(SheetWriteHandlerContext context) {}
4753
}

fastexcel/src/main/java/cn/idev/excel/write/handler/chain/SheetHandlerExecutionChain.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,11 @@ public void addLast(SheetWriteHandler handler) {
4949
}
5050
context.next = new SheetHandlerExecutionChain(handler);
5151
}
52+
53+
public void afterSheetDispose(SheetWriteHandlerContext context) {
54+
this.handler.afterSheetDispose(context);
55+
if (this.next != null) {
56+
this.next.afterSheetDispose(context);
57+
}
58+
}
5259
}

fastexcel/src/test/java/cn/idev/excel/test/core/handler/WriteHandler.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import cn.idev.excel.write.handler.RowWriteHandler;
77
import cn.idev.excel.write.handler.SheetWriteHandler;
88
import cn.idev.excel.write.handler.WorkbookWriteHandler;
9+
import cn.idev.excel.write.handler.context.SheetWriteHandlerContext;
910
import cn.idev.excel.write.metadata.holder.WriteSheetHolder;
1011
import cn.idev.excel.write.metadata.holder.WriteTableHolder;
1112
import cn.idev.excel.write.metadata.holder.WriteWorkbookHolder;
@@ -28,6 +29,7 @@ public class WriteHandler implements WorkbookWriteHandler, SheetWriteHandler, Ro
2829
private long afterRowDispose = 0L;
2930
private long beforeSheetCreate = 0L;
3031
private long afterSheetCreate = 0L;
32+
private long afterSheetDispose = 0L;
3133
private long beforeWorkbookCreate = 0L;
3234
private long afterWorkbookCreate = 0L;
3335
private long afterWorkbookDispose = 0L;
@@ -51,6 +53,7 @@ public void beforeCellCreate(
5153
Assertions.assertEquals(0L, afterRowDispose);
5254
Assertions.assertEquals(1L, beforeSheetCreate);
5355
Assertions.assertEquals(1L, afterSheetCreate);
56+
Assertions.assertEquals(0L, afterSheetDispose);
5457
Assertions.assertEquals(1L, beforeWorkbookCreate);
5558
Assertions.assertEquals(1L, afterWorkbookCreate);
5659
Assertions.assertEquals(0L, afterWorkbookDispose);
@@ -76,6 +79,7 @@ public void afterCellCreate(
7679
Assertions.assertEquals(0L, afterRowDispose);
7780
Assertions.assertEquals(1L, beforeSheetCreate);
7881
Assertions.assertEquals(1L, afterSheetCreate);
82+
Assertions.assertEquals(0L, afterSheetDispose);
7983
Assertions.assertEquals(1L, beforeWorkbookCreate);
8084
Assertions.assertEquals(1L, afterWorkbookCreate);
8185
Assertions.assertEquals(0L, afterWorkbookDispose);
@@ -101,6 +105,7 @@ public void afterCellDataConverted(
101105
Assertions.assertEquals(1L, afterRowDispose);
102106
Assertions.assertEquals(1L, beforeSheetCreate);
103107
Assertions.assertEquals(1L, afterSheetCreate);
108+
Assertions.assertEquals(0L, afterSheetDispose);
104109
Assertions.assertEquals(1L, beforeWorkbookCreate);
105110
Assertions.assertEquals(1L, afterWorkbookCreate);
106111
Assertions.assertEquals(0L, afterWorkbookDispose);
@@ -126,6 +131,7 @@ public void afterCellDispose(
126131
Assertions.assertEquals(0L, afterRowDispose);
127132
Assertions.assertEquals(1L, beforeSheetCreate);
128133
Assertions.assertEquals(1L, afterSheetCreate);
134+
Assertions.assertEquals(0L, afterSheetDispose);
129135
Assertions.assertEquals(1L, beforeWorkbookCreate);
130136
Assertions.assertEquals(1L, afterWorkbookCreate);
131137
Assertions.assertEquals(0L, afterWorkbookDispose);
@@ -150,6 +156,7 @@ public void beforeRowCreate(
150156
Assertions.assertEquals(0L, afterRowDispose);
151157
Assertions.assertEquals(1L, beforeSheetCreate);
152158
Assertions.assertEquals(1L, afterSheetCreate);
159+
Assertions.assertEquals(0L, afterSheetDispose);
153160
Assertions.assertEquals(1L, beforeWorkbookCreate);
154161
Assertions.assertEquals(1L, afterWorkbookCreate);
155162
Assertions.assertEquals(0L, afterWorkbookDispose);
@@ -174,6 +181,7 @@ public void afterRowCreate(
174181
Assertions.assertEquals(0L, afterRowDispose);
175182
Assertions.assertEquals(1L, beforeSheetCreate);
176183
Assertions.assertEquals(1L, afterSheetCreate);
184+
Assertions.assertEquals(0L, afterSheetDispose);
177185
Assertions.assertEquals(1L, beforeWorkbookCreate);
178186
Assertions.assertEquals(1L, afterWorkbookCreate);
179187
Assertions.assertEquals(0L, afterWorkbookDispose);
@@ -198,6 +206,7 @@ public void afterRowDispose(
198206
Assertions.assertEquals(0L, afterRowDispose);
199207
Assertions.assertEquals(1L, beforeSheetCreate);
200208
Assertions.assertEquals(1L, afterSheetCreate);
209+
Assertions.assertEquals(0L, afterSheetDispose);
201210
Assertions.assertEquals(1L, beforeWorkbookCreate);
202211
Assertions.assertEquals(1L, afterWorkbookCreate);
203212
Assertions.assertEquals(0L, afterWorkbookDispose);
@@ -216,6 +225,7 @@ public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteShee
216225
Assertions.assertEquals(0L, afterRowDispose);
217226
Assertions.assertEquals(0L, beforeSheetCreate);
218227
Assertions.assertEquals(0L, afterSheetCreate);
228+
Assertions.assertEquals(0L, afterSheetDispose);
219229
Assertions.assertEquals(1L, beforeWorkbookCreate);
220230
Assertions.assertEquals(1L, afterWorkbookCreate);
221231
Assertions.assertEquals(0L, afterWorkbookDispose);
@@ -233,6 +243,7 @@ public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheet
233243
Assertions.assertEquals(0L, afterRowDispose);
234244
Assertions.assertEquals(1L, beforeSheetCreate);
235245
Assertions.assertEquals(0L, afterSheetCreate);
246+
Assertions.assertEquals(0L, afterSheetDispose);
236247
Assertions.assertEquals(1L, beforeWorkbookCreate);
237248
Assertions.assertEquals(1L, afterWorkbookCreate);
238249
Assertions.assertEquals(0L, afterWorkbookDispose);
@@ -250,6 +261,7 @@ public void beforeWorkbookCreate() {
250261
Assertions.assertEquals(0L, afterRowDispose);
251262
Assertions.assertEquals(0L, beforeSheetCreate);
252263
Assertions.assertEquals(0L, afterSheetCreate);
264+
Assertions.assertEquals(0L, afterSheetDispose);
253265
Assertions.assertEquals(0L, beforeWorkbookCreate);
254266
Assertions.assertEquals(0L, afterWorkbookCreate);
255267
Assertions.assertEquals(0L, afterWorkbookDispose);
@@ -267,6 +279,7 @@ public void afterWorkbookCreate(WriteWorkbookHolder writeWorkbookHolder) {
267279
Assertions.assertEquals(0L, afterRowDispose);
268280
Assertions.assertEquals(0L, beforeSheetCreate);
269281
Assertions.assertEquals(0L, afterSheetCreate);
282+
Assertions.assertEquals(0L, afterSheetDispose);
270283
Assertions.assertEquals(1L, beforeWorkbookCreate);
271284
Assertions.assertEquals(0L, afterWorkbookCreate);
272285
Assertions.assertEquals(0L, afterWorkbookDispose);
@@ -284,12 +297,31 @@ public void afterWorkbookDispose(WriteWorkbookHolder writeWorkbookHolder) {
284297
Assertions.assertEquals(1L, afterRowDispose);
285298
Assertions.assertEquals(1L, beforeSheetCreate);
286299
Assertions.assertEquals(1L, afterSheetCreate);
300+
Assertions.assertEquals(1L, afterSheetDispose);
287301
Assertions.assertEquals(1L, beforeWorkbookCreate);
288302
Assertions.assertEquals(1L, afterWorkbookCreate);
289303
Assertions.assertEquals(0L, afterWorkbookDispose);
290304
afterWorkbookDispose++;
291305
}
292306

307+
@Override
308+
public void afterSheetDispose(SheetWriteHandlerContext context) {
309+
Assertions.assertEquals(1L, beforeCellCreate);
310+
Assertions.assertEquals(1L, afterCellCreate);
311+
Assertions.assertEquals(1L, afterCellDataConverted);
312+
Assertions.assertEquals(1L, afterCellDispose);
313+
Assertions.assertEquals(1L, beforeRowCreate);
314+
Assertions.assertEquals(1L, afterRowCreate);
315+
Assertions.assertEquals(1L, afterRowDispose);
316+
Assertions.assertEquals(1L, beforeSheetCreate);
317+
Assertions.assertEquals(1L, afterSheetCreate);
318+
Assertions.assertEquals(0L, afterSheetDispose);
319+
Assertions.assertEquals(1L, beforeWorkbookCreate);
320+
Assertions.assertEquals(1L, afterWorkbookCreate);
321+
Assertions.assertEquals(0L, afterWorkbookDispose);
322+
afterSheetDispose++;
323+
}
324+
293325
public void afterAll() {
294326
Assertions.assertEquals(1L, beforeCellCreate);
295327
Assertions.assertEquals(1L, afterCellCreate);
@@ -303,5 +335,6 @@ public void afterAll() {
303335
Assertions.assertEquals(1L, beforeWorkbookCreate);
304336
Assertions.assertEquals(1L, afterWorkbookCreate);
305337
Assertions.assertEquals(1L, afterWorkbookDispose);
338+
Assertions.assertEquals(1L, afterSheetDispose);
306339
}
307340
}

fastexcel/src/test/java/cn/idev/excel/test/demo/fill/FillTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import cn.idev.excel.test.util.TestFileUtil;
77
import cn.idev.excel.util.ListUtils;
88
import cn.idev.excel.util.MapUtils;
9+
import cn.idev.excel.write.handler.SheetWriteHandler;
10+
import cn.idev.excel.write.handler.context.SheetWriteHandlerContext;
911
import cn.idev.excel.write.metadata.WriteSheet;
1012
import cn.idev.excel.write.metadata.fill.FillConfig;
1113
import cn.idev.excel.write.metadata.fill.FillWrapper;
@@ -14,6 +16,8 @@
1416
import java.util.HashMap;
1517
import java.util.List;
1618
import java.util.Map;
19+
import org.apache.poi.ss.usermodel.Sheet;
20+
import org.apache.poi.ss.util.CellRangeAddress;
1721
import org.junit.jupiter.api.Test;
1822

1923
/**
@@ -260,6 +264,27 @@ public void dateFormatFill() {
260264
FastExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(data());
261265
}
262266

267+
@Test
268+
public void testFillSheetDispose() {
269+
String templateFileName =
270+
TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "simple.xlsx";
271+
String fileName = TestFileUtil.getPath() + "simpleFill" + System.currentTimeMillis() + ".xlsx";
272+
FillData fillData = new FillData();
273+
fillData.setName("Zhang San");
274+
fillData.setNumber(5.2);
275+
FastExcel.write(fileName)
276+
.withTemplate(templateFileName)
277+
.sheet()
278+
.registerWriteHandler(new SheetWriteHandler() {
279+
@Override
280+
public void afterSheetDispose(SheetWriteHandlerContext context) {
281+
Sheet sheet = context.getWriteSheetHolder().getSheet();
282+
sheet.addMergedRegionUnsafe(new CellRangeAddress(1, 2, 0, 1));
283+
}
284+
})
285+
.doFill(fillData);
286+
}
287+
263288
private List<FillData> data() {
264289
List<FillData> list = ListUtils.newArrayList();
265290
for (int i = 0; i < 10; i++) {

fastexcel/src/test/java/cn/idev/excel/test/demo/write/WriteTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
import cn.idev.excel.util.ListUtils;
2323
import cn.idev.excel.write.handler.CellWriteHandler;
2424
import cn.idev.excel.write.handler.EscapeHexCellWriteHandler;
25+
import cn.idev.excel.write.handler.SheetWriteHandler;
2526
import cn.idev.excel.write.handler.context.CellWriteHandlerContext;
27+
import cn.idev.excel.write.handler.context.SheetWriteHandlerContext;
2628
import cn.idev.excel.write.merge.LoopMergeStrategy;
2729
import cn.idev.excel.write.metadata.WriteSheet;
2830
import cn.idev.excel.write.metadata.WriteTable;
@@ -42,7 +44,9 @@
4244
import org.apache.poi.ss.usermodel.CellStyle;
4345
import org.apache.poi.ss.usermodel.FillPatternType;
4446
import org.apache.poi.ss.usermodel.IndexedColors;
47+
import org.apache.poi.ss.usermodel.Sheet;
4548
import org.apache.poi.ss.usermodel.Workbook;
49+
import org.apache.poi.ss.util.CellRangeAddress;
4650
import org.apache.poi.xssf.streaming.SXSSFSheet;
4751
import org.junit.jupiter.api.Test;
4852

@@ -741,6 +745,23 @@ public void noModelWrite() {
741745
FastExcel.write(fileName).head(head()).sheet("模板").doWrite(dataList());
742746
}
743747

748+
@Test
749+
public void sheetDisposeTest() {
750+
String fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";
751+
FastExcel.write(fileName, DemoData.class)
752+
.sheet("模板")
753+
.registerWriteHandler(new SheetWriteHandler() {
754+
@Override
755+
public void afterSheetDispose(SheetWriteHandlerContext context) {
756+
Sheet sheet = context.getWriteSheetHolder().getSheet();
757+
// 合并区域单元格
758+
sheet.addMergedRegionUnsafe(new CellRangeAddress(1, 10, 2, 2));
759+
}
760+
})
761+
.doWrite(this::data);
762+
System.out.println(fileName);
763+
}
764+
744765
private List<LongestMatchColumnWidthData> dataLong() {
745766
List<LongestMatchColumnWidthData> list = ListUtils.newArrayList();
746767
for (int i = 0; i < 10; i++) {

0 commit comments

Comments
 (0)