From 94b3c04a5337743065005c7111bc24d1dc4d06c3 Mon Sep 17 00:00:00 2001 From: Nightoray <714137613@qq.com> Date: Thu, 30 Nov 2023 16:09:22 +0800 Subject: [PATCH] #3584 #2559 --- .../impl/CustomCsvDelimiterHandler.java | 30 +++++++++++++++++++ .../easyexcel/test/demo/write/WriteTest.java | 13 ++++++++ 2 files changed, 43 insertions(+) create mode 100644 easyexcel-core/src/main/java/com/alibaba/excel/write/handler/impl/CustomCsvDelimiterHandler.java diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/impl/CustomCsvDelimiterHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/impl/CustomCsvDelimiterHandler.java new file mode 100644 index 00000000..41510d1b --- /dev/null +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/impl/CustomCsvDelimiterHandler.java @@ -0,0 +1,30 @@ +package com.alibaba.excel.write.handler.impl; + +import com.alibaba.excel.metadata.csv.CsvSheet; +import com.alibaba.excel.metadata.csv.CsvWorkbook; +import com.alibaba.excel.write.handler.RowWriteHandler; +import com.alibaba.excel.write.handler.context.RowWriteHandlerContext; + +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Workbook; + +/** + * @author chlch + */ +@Slf4j +public class CustomCsvDelimiterHandler implements RowWriteHandler { + private char delimiter; + + public CustomCsvDelimiterHandler(char delimiter) { + this.delimiter = delimiter; + } + + public void beforeRowCreate(RowWriteHandlerContext context) { + Workbook workbook = context.getWriteWorkbookHolder().getWorkbook(); + if (workbook instanceof CsvWorkbook) { + CsvWorkbook csvWorkbook = (CsvWorkbook)workbook; + CsvSheet csvSheet = csvWorkbook.getCsvSheet(); + csvSheet.setCsvFormat(csvSheet.getCsvFormat().withDelimiter(delimiter)); + } + } +} diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java index 0e7cf2db..1cd1d277 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java @@ -34,6 +34,7 @@ import com.alibaba.excel.util.FileUtils; import com.alibaba.excel.util.ListUtils; import com.alibaba.excel.write.handler.CellWriteHandler; import com.alibaba.excel.write.handler.context.CellWriteHandlerContext; +import com.alibaba.excel.write.handler.impl.CustomCsvDelimiterHandler; import com.alibaba.excel.write.merge.LoopMergeStrategy; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.WriteTable; @@ -705,6 +706,18 @@ public class WriteTest { EasyExcel.write(fileName).head(head()).sheet("模板").doWrite(dataList()); } + /** + * + * csv文件自定义分隔符 + */ + @Test + public void customHandlerDelimiterWrite() { + String fileName = TestFileUtil.getPath() + "customDelimiterWrite" + System.currentTimeMillis() + ".csv"; + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, DemoData.class).registerWriteHandler(new CustomCsvDelimiterHandler('|')) + .registerWriteHandler(new CustomCsvDelimiterHandler('|')).sheet("模板").doWrite(data()); + } + private List dataLong() { List list = ListUtils.newArrayList(); for (int i = 0; i < 10; i++) {