csv以及excel文件解析

论坛 期权论坛 脚本     
匿名技术用户   2021-1-14 17:47   957   0
<!-- csv文件解析依赖 -->
<dependency>
   <groupId>com.opencsv</groupId>
   <artifactId>opencsv</artifactId>
   <version>4.3.2</version>
</dependency>
<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <scope>compile</scope>
</dependency>

@RequestMapping(value = "/file/upload", method = RequestMethod.POST)
@Response
public BaseResult batchInsert(@RequestPart("file") MultipartFile file, String charsetName) {
    //excel默认转换成csv文件编码方式是gbk,文件限制了大小,太多文件分多次上传
    if (StringUtil.isEmpty(charsetName)) {
        charsetName = CHARSET_NAME_GBK;
    }

    BaseResult baseResult = new BaseResult();
    CsvUtil csvUtil = new CsvUtil();
    // 将csv文件内容转成bean
    List<DataBarrageFillersCsv> csvData = csvUtil.getCsvData(file, DataBarrageFillersCsv.class, charsetName);

    if (CollectionUtils.isEmpty(csvData)) {
        return baseResult;
    }

.....

}

public class CsvUtil {
    /**
     * 日志对象
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(CsvUtil.class);

    /**
     * 解析csv文件并转成bean
     *
     * @param file  csv文件
     * @param clazz 类
     * @param <T>   泛型
     * @return 泛型bean集合
     */
    public <T> List<T> getCsvData(MultipartFile file, Class<T> clazz, String charsetName) {
        BOMInputStream bomInputStream = null;
        try {
            bomInputStream = new BOMInputStream(file.getInputStream());
        } catch (Exception e) {
            LOGGER.error("getCsvData transfer BOMInputStream error,", e);
        }

        HeaderColumnNameMappingStrategy<T> strategy = new HeaderColumnNameMappingStrategy<>();
        strategy.setType(clazz);

        CsvToBean<T> csvToBean = null;
        try {
            csvToBean = new CsvToBeanBuilder<T>(new InputStreamReader(bomInputStream, charsetName))
                    .withSeparator(',')
                    .withQuoteChar('\'')
                    .withQuoteChar('\"')
                    .withMappingStrategy(strategy).build();
        } catch (UnsupportedEncodingException e) {
            LOGGER.error("getCsvData charsetName is  UnsupportedEncodingException error,", e);
        }
        return csvToBean.parse();
    }
@Data
public class DataBarrageFillersCsv {

    @CsvBindByName(column = "content")
    private String content;

    @CsvBindByName(column = "fill_pos")
    private Integer fillPos;

    @CsvBindByName(column = "type")
    private Integer type;

    @CsvBindByName(column = "barrage_color")
    private Integer barrageColor;

}

id,content,fill_pos,type,barrage_color,created_at,updated_at,is_deleted
1,"ce测试1,!!",1,3,0,07/29/2020 11:08:49,07/29/2020 11:08:49,0

https://blog.csdn.net/qq_31289187/article/details/86104522

excel解析:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.5</version>
</dependency>
@Override
public void processInvoke() {
    log.info("start to do task...");
    try {
        File file = ResourceUtils.getFile("classpath:cXX.xlsx");
        EasyExcel.read(file, pictureUploadModel.class, new PictureExcelReadListener(PictureUploadService)).sheet().doRead();
    } catch (Exception e) {
        log.error("do task error.", e);
    }
}
/**
 * @Author chong.wang@ximalaya.com
 * @Date 2020/12/15
 */
public class PictureExcelReadListener extends AnalysisEventListener<ChannelPictureUploadModel> {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    private ChannelPictureUploadService channelPictureUploadService;

    public PictureExcelReadListener(ChannelPictureUploadService channelPictureUploadService) {
        this.channelPictureUploadService = channelPictureUploadService;
    }

    @Override
    public void invoke(PictureUploadModel data, AnalysisContext context) {
        logger.info("读取第{}条数据", context.readRowHolder().getRowIndex());
        channelPictureUploadService.processData(data);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        logger.info("数据处理完成......");
    }

}
@Data
public class PictureUploadModel {

    @ExcelProperty(index = 0)
    private String groupName;

    @ExcelProperty(index = 1)
    private Long groupPosition;
   
}

public void processData(ChannelPictureUploadModel data) {
    try {
        String filePath =".png";
      
        ChannelGroupModel param = assembleParam(data, coverUploadRes);
        doHttpProcess(param);
    } catch (Exception e) {
        logger.error("upload channelImage error. data:{}", data.toString(), e);
    }
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP