EasyExcel导入导出

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>${easyexcel.version}</version>
</dependency>

<properties>
    <java.version>1.8</java.version>
    <ts-common.version>1.0.0-SNAPSHOT</ts-common.version>
    <mybatis-plus.version>3.4.2</mybatis-plus.version>
    <easyexcel.version>3.2.1</easyexcel.version>
</properties>

工具类:

public class ExportUtil {

    /**
     * 导出设置response属性
     * @param name 文件名
     * @param response 响应体
     * @throws UnsupportedEncodingException 异常信息
     */
    public static void setResponse(String name, HttpServletResponse response) throws UnsupportedEncodingException {
        response.setContentType(ExportConst.CONTENT_TYPE);
        response.setCharacterEncoding(StandardCharsets.UTF_8.name());
        String fileName = URLEncoder.encode(name, StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20");
        response.setHeader(ExportConst.HEADER_NAME, ExportConst.HEADER_VALUE + fileName + ExportConst.SUFFIX);
    }

}

Controller:

/**
 * 项目类服务单验收导出
 *
 * @param searchBO 入参BO
 */
@PostMapping("project-check-accept-export")
public void projectCheckAcceptExport(@RequestBody OrderProjectCheckAcceptSearchBO searchBO, HttpServletResponse response) throws IOException {
    ExportUtil.setResponse(ExportConst.PROJECT_CHECK_ACCEPT, response);
    List<OrderProjectCheckExportVO> voList = orderService.projectCheckExport(searchBO);
    EasyExcel.write(response.getOutputStream(), OrderProjectCheckExportVO.class)
            .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
            .sheet(ExportConst.PROJECT_CHECK_ACCEPT + ExportConst.LIST).doWrite(voList);
}

 

1.导入:

/**
 * 服务商价格批量导入
 */
@PostMapping("unit-price-import")
public ResponseResult unitPriceImport(@RequestPart("file") MultipartFile file) throws IOException {
    EasyExcel.read(file.getInputStream(), UnitPriceImportReadBO.class, new PageReadListener<UnitPriceImportReadBO>(dataList -> {
        supplierUnitPriceService.unitPriceImport(dataList);
    }, 20000)).sheet().doRead();
    return ResponseResult.success("价格批量导入结束");
}

2.使用监听器导入:优点-可以获取导入内的数据返回


/**
 * excelListener
 *
 * @author wangdelongWX1
 * @date 2023/6/28 9:41
 */
public final class ExcelListener<T> extends AnalysisEventListener<T> {

    /**
     * 自定义用于暂时存储data
     * 可以通过实例获取该值
     */
    private List<T> dataList = new ArrayList<>();

    /**
     * 每解析一行都会回调invoke()方法
     *
     * @param object  读取后的数据对象
     * @param context 内容
     */
    @Override
    @SuppressWarnings("unchecked")
    public void invoke(Object object, AnalysisContext context) {
        T map = (T) object;
        //数据存储到list,供批量处理,或后续自己业务逻辑处理。
        dataList.add(map);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        //解析结束销毁不用的资源
        //注意不要调用dataList.clear(),否则getDataListnull
    }

    /**
     * 返回数据
     *
     * @return 返回读取的数据集合
     **/
    public List<T> getDataList() {
        return dataList;
    }

    /**
     * 设置读取的数据集合
     *
     * @param dataList 设置读取的数据集合
     **/
    public void setDataList(List<T> dataList) {
        this.dataList = dataList;
    }

Controller:

/**
 * 项目类订单批量导入
 */
@PostMapping("project-import")
public ResponseResult projectImport(@RequestPart("file") MultipartFile file) throws IOException {
    ExcelListener<ProjectImportReadBO> listener = new ExcelListener<>();
    EasyExcelFactory.read(file.getInputStream(), ProjectImportReadBO.class, listener).headRowNumber(1).sheet().doRead();
    List<ProjectImportReadBO> list = listener.getDataList();
    List<ErrorExportVO> voList = orderProcessService.projectImport(list);
    return ResponseResult.success(voList);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值