Skip to content
Open
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,13 @@
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.apache.fesod.common.util.ListUtils;
import org.apache.fesod.common.util.StringUtils;
import org.apache.fesod.sheet.enums.HeaderMergeStrategy;
Expand Down Expand Up @@ -489,6 +493,36 @@ public void finish(boolean onException) {
return;
}
finished = true;

// executes the callback after all sheets has been fully written.
Map<Integer, WriteSheetHolder> writeSheetHolderMap = writeWorkbookHolder.getHasBeenInitializedSheetIndexMap();
if (MapUtils.isNotEmpty(writeSheetHolderMap)) {
if (MapUtils.size(writeSheetHolderMap) == 1) {
SheetWriteHandlerContext sheetWriteHandlerContext =
WriteHandlerUtils.createSheetWriteHandlerContext(this);
WriteHandlerUtils.afterSheetDispose(sheetWriteHandlerContext);
} else {
List<Integer> sheetNos = writeSheetHolderMap.keySet().stream()
.filter(Objects::nonNull)
.sorted()
.collect(Collectors.toList());

for (Integer sheetNo : sheetNos) {
WriteSheetHolder holder = writeSheetHolderMap.get(sheetNo);
if (Objects.nonNull(holder)) {
// switch context
this.writeSheetHolder = holder;
this.writeTableHolder = null;
this.currentWriteHolder = holder;

SheetWriteHandlerContext sheetWriteHandlerContext =
WriteHandlerUtils.createSheetWriteHandlerContext(this);
WriteHandlerUtils.afterSheetDispose(sheetWriteHandlerContext);
}
}
}
}

WriteHandlerUtils.afterWorkbookDispose(writeWorkbookHolder.getWorkbookWriteHandlerContext());
if (writeWorkbookHolder == null) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,7 @@ public static void afterRowDispose(RowWriteHandlerContext context) {
}
}

public static void afterSheetDispose(WriteContext writeContext) {
SheetWriteHandlerContext context = WriteHandlerUtils.createSheetWriteHandlerContext(writeContext);
public static void afterSheetDispose(SheetWriteHandlerContext context) {
SheetHandlerExecutionChain sheetHandlerExecutionChain = getSheetHandlerExecutionChain(context, false);
if (sheetHandlerExecutionChain != null) {
sheetHandlerExecutionChain.afterSheetDispose(context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
import org.apache.fesod.sheet.exception.ExcelGenerateException;
import org.apache.fesod.sheet.support.ExcelTypeEnum;
import org.apache.fesod.sheet.util.FileUtils;
import org.apache.fesod.sheet.util.WriteHandlerUtils;
import org.apache.fesod.sheet.write.executor.ExcelWriteAddExecutor;
import org.apache.fesod.sheet.write.executor.ExcelWriteFillExecutor;
import org.apache.fesod.sheet.write.metadata.WriteSheet;
Expand Down Expand Up @@ -81,8 +80,6 @@ public void addContent(Collection<?> data, WriteSheet writeSheet, WriteTable wri
excelWriteAddExecutor = new ExcelWriteAddExecutor(context);
}
excelWriteAddExecutor.add(data);
// execute callback after the sheet is written
WriteHandlerUtils.afterSheetDispose(context);
} catch (RuntimeException e) {
finishOnException();
throw e;
Expand All @@ -106,8 +103,6 @@ public void fill(Object data, FillConfig fillConfig, WriteSheet writeSheet) {
excelWriteFillExecutor = new ExcelWriteFillExecutor(context);
}
excelWriteFillExecutor.fill(data, fillConfig);
// execute callback after the sheet is written
WriteHandlerUtils.afterSheetDispose(context);
} catch (RuntimeException e) {
finishOnException();
throw e;
Expand Down
Loading
Loading