alibaba / easyexcel

快速、简洁、解决大文件内存溢出的java处理Excel工具
https://easyexcel.opensource.alibaba.com
Apache License 2.0
32k stars 7.49k forks source link

csv文件解析到特殊字符直接异常终止,有没有办法跳过这一行或者解析这行 #3568

Open nfpss opened 9 months ago

nfpss commented 9 months ago

"java.lang.IllegalStateException: IOException reading next record: java.io.IOException: (line 9) invalid char between encapsulated token and delimiter at org.apache.commons.csv.CSVParserCSVRecordIterator.getNextRecord(CSVParser.java:145)atorg.apache.commons.csv.CSVParser CSVRecordIterator.hasNext(CSVParser.java:155) at com.alibaba.excel.analysis.csv.CsvExcelReadExecutor.execute(CsvExcelReadExecutor.java:73) at com.alibaba.excel.analysis.ExcelAnalyserImpl.analysis(ExcelAnalyserImpl.java:124) at com.alibaba.excel.ExcelReader.read(ExcelReader.java:66) at com.alibaba.excel.ExcelReader.read(ExcelReader.java:56) at com.alibaba.excel.read.builder.ExcelReaderSheetBuilder.doRead(ExcelReaderSheetBuilder.java:65) at com.xhqb.soc.datacollect.util.ExcelUtils.read(ExcelUtils.java:31)

数据如下: "Operation Triangulation" 卡巴斯基被黑 - 续, https://mp.weixin.qq.com/s/ESi0bWF_jQ4nS1-CwjxlEQ, 2023-11-19

550932785 commented 9 months ago

可以尝试 增加自己的转换器 如下 public class MyStringConverter implements Converter {

@Override
public Class<?> supportJavaTypeKey() {
    return String.class;
}

@Override
public CellDataTypeEnum supportExcelTypeKey() {
    return CellDataTypeEnum.STRING;
}

@Override
public WriteCellData<?> convertToExcelData(String value, ExcelContentProperty contentProperty,
                                           GlobalConfiguration globalConfiguration) {
    return new WriteCellData<>(value);
}

@Override
public String convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
    // 自定义读取逻辑,将双引号替换为空字符串
    String value = cellData.getStringValue();
    value = value.replaceAll("\"", "");
    return value;
}
unnoc commented 3 months ago

读取的时候就报错了