Nightoray 1 year ago
parent
commit
94b3c04a53
  1. 30
      easyexcel-core/src/main/java/com/alibaba/excel/write/handler/impl/CustomCsvDelimiterHandler.java
  2. 13
      easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java

30
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));
}
}
}

13
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<LongestMatchColumnWidthData> dataLong() {
List<LongestMatchColumnWidthData> list = ListUtils.newArrayList();
for (int i = 0; i < 10; i++) {

Loading…
Cancel
Save