首页 > 其他分享 >EasyExcel 读取xls 监听行数据问题

EasyExcel 读取xls 监听行数据问题

时间:2024-07-25 16:21:58浏览次数:13  
标签:dto 未填写 rowIndex EasyExcel IllegalArgumentException throw new xls 监听

需求:导入xls 文件 需要判断是否空值,时间格式是否问题

监听器

class ExcelListener extends AnalysisEventListener<RevWaterUserDocAndUserPayImportExl> {
        public ExcelListener(List<RevWaterUserDocAndUserPayImportExl> result) {
            this.list = result;
        }

        private List<RevWaterUserDocAndUserPayImportExl> list;

        @Override
        public void onException(Exception exception, AnalysisContext context) throws Exception {
            super.onException(exception, context);
        }

        @Override
        public void invoke(RevWaterUserDocAndUserPayImportExl dto, AnalysisContext analysisContext) {
            ReadRowHolder readRowHolder = analysisContext.readRowHolder();
            Integer rowIndex = readRowHolder.getRowIndex(); // 行数
            // 这里可以处理你的数据,例如校验字段是否为空

            if (ObjectUtil.isNotNull(dto)) {
                String meterCode = dto.getMeterCode();// 水表号
                if (StringUtils.isEmpty(meterCode)) {
                    throw new IllegalArgumentException("第" + rowIndex + "行水表号未填写!");
                }

                String meterTypeName = dto.getMeterTypeName();// 水表类型
                if (StringUtils.isEmpty(meterTypeName)) {
                    throw new IllegalArgumentException("第" + rowIndex + "行水表类型未填写!");
                }

                String userCode = dto.getUserCode();// 用户号
                if (StringUtils.isEmpty(userCode)) {
                    throw new IllegalArgumentException("第" + rowIndex + "行用户号未填写!");
                }
                String userName = dto.getUserName();// 用户名
                if (StringUtils.isEmpty(userName)) {
                    throw new IllegalArgumentException("第" + rowIndex + "行用户名未填写!");
                }

                String divisionName = dto.getDivisionName();// 所在行政区划
                if (StringUtils.isEmpty(divisionName)) {
                    throw new IllegalArgumentException("第" + rowIndex + "行所在行政区划未填写!");
                }

                Long serialNumber = dto.getSerialNumber();// 序号
                if (ObjectUtil.isNull(serialNumber)) {
                    throw new IllegalArgumentException("第" + rowIndex + "行序号未填写!");
                }

                String meterReaderName = dto.getMeterReaderName();// 抄表员
                if (StringUtils.isEmpty(meterReaderName)) {
                    throw new IllegalArgumentException("第" + rowIndex + "行抄表员未填写!");
                }

                Double lastEndCode = dto.getLastEndCode();// 上月止码
                if (ObjectUtil.isNull(lastEndCode)) {
                    throw new IllegalArgumentException("第" + rowIndex + "行上月止码未填写!");
                }

                Double currEndCode = dto.getCurrEndCode();// 本月止码
                if (ObjectUtil.isNull(currEndCode)) {
                    throw new IllegalArgumentException("第" + rowIndex + "行本月止码未填写!");
                }

                Double unitPrice = dto.getUnitPrice();// 单价
                if (ObjectUtil.isNull(unitPrice)) {
                    throw new IllegalArgumentException("第" + rowIndex + "行单价未填写!");
                }

                Double lastArrears = dto.getLastArrears();// 上月总欠
                if (ObjectUtil.isNull(lastArrears)) {
                    throw new IllegalArgumentException("第" + rowIndex + "行上月总欠未填写!");
                }

                Double currArrears = dto.getCurrArrears();// 本月总欠
                if (ObjectUtil.isNull(currArrears)) {
                    throw new IllegalArgumentException("第" + rowIndex + "行本月总欠未填写!");
                }

                Double payNeed = dto.getPayNeed();// 金额
                if (ObjectUtil.isNull(payNeed)) {
                    throw new IllegalArgumentException("第" + rowIndex + "行金额未填写!");
                }

                Double totalUsage = dto.getTotalUsage();// 实用吨数
                if (ObjectUtil.isNull(totalUsage)) {
                    throw new IllegalArgumentException("第" + rowIndex + "行实用吨数未填写!");
                }

                String paytime = dto.getPaytime();// 日期
                if (StringUtils.isEmpty(paytime)) {
                    throw new IllegalArgumentException("第" + rowIndex + "行日期未填写!");
                } else { // 时间转换
                    try {
                        Date date = DateUtil.parse(paytime);
                    } catch (DateException e) {
                        throw new IllegalArgumentException("第" + rowIndex + "行日期格式错误!");
                    }

                }
            }

        }

        @Override
        public void extra(CellExtra extra, AnalysisContext context) {
            super.extra(extra, context);
        }

        @Override
        public void doAfterAllAnalysed(AnalysisContext analysisContext) {
            // 解析完之后的逻辑

        }

        @Override
        public boolean hasNext(AnalysisContext context) {
            return super.hasNext(context);
        }
    }

 调用监听器

    @Transactional(rollbackFor = Exception.class)
    public void importUserDocAndUser(MultipartFile file, String bilitime) throws IOException {
        List<RevWaterUserDocAndUserPayImportExl> list = new ArrayList<>();

        List<RevWaterUserDocAndUserPayImportExl> revWaterUserDocImpExlList = EasyExcel.read(file.getInputStream(),
                new ExcelListener(list)).head(RevWaterUserDocAndUserPayImportExl.class).headRowNumber(1).sheet().doReadSync();
        if (revWaterUserDocImpExlList.size() >= 10000) {
            throw new RuntimeException("数据量大,单次批量导入超过10000条");
        }
        // 其他逻辑
    }

 

标签:dto,未填写,rowIndex,EasyExcel,IllegalArgumentException,throw,new,xls,监听
From: https://www.cnblogs.com/lcaiqin/p/18323442

相关文章

  • 微信小程序本地读取xls文件
    微信小程序本地读取xls文件:其中用到一个js-xlsx库:https://docs.sheetjs.com/docs/demos/frontend/vue/,主要思路是1.通过  wx.chooseMessageFile上传文件,获得一个临时地址 tempFilePath。(这个地址不能当作文件路径,让js-xlsx库读取,constworkbook=XLSX.readFile('临......
  • easyexcel的读写操作
    easyexcel是基于java的读写excel的开源项目--读写也可理解为上传和下载写操作一、引入依赖<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></dependency>二、封装相应对象@Data@AllArgsConst......
  • flutter在监听设备
    依赖universal_platform:^1.1.0#判断设备用于检测平台类型(如Android、iOS、Web)flutter_device_type:^0.4.0#设备是否为平板(苹果与安卓)代码classMyApp1extendsStatelessWidget{@overrideWidgetbuild(BuildContextcontext){returnMaterialApp(......
  • bluez glib编程 --- signal 信号的监听
    监听添加新对象的信号objectManager=g_dbus_proxy_new_sync(conn,G_DBUS_PROXY_FLAGS_NONE,NULL,"org.bluez","/","org.freede......
  • 使用 Python XlsxWriter 将 DatePicker 添加到 Excel 单元格中?
    我正在尝试使用PythonXlsxWriter生成的Excel创建输入表单。我想知道是否可以在Excel单元格中添加一个迷你日历(作为DatePicker)供用户输入日期?我偶然发现了Microsoft支持团队提供的本指南插入日期选择器:|||https://support.microsoft.com/en-us/office/......
  • 同时使用easyexcel和Apache poi的依赖冲突问题
      前言Hello,hello!这里是Blue,今天我写代码遇到了一个这样的问题,我在使用easyexcel的时候它无法去执行我的操作,通过我一定的判断最终解决了问题报错 com.alibaba.excel.exception.ExcelAnalysisException:java.lang.NoClassDefFoundError:org/apache/poi/POIXMLTy......
  • xlsx 前端插件 导出 elment表格示例
    安装yarnaddxlsxyarnaddfile-savergit文档:https://github.com/rockboom/SheetJS-docs-zh-CNnpm地址:https://www.npmjs.com/package/xlsx代码<template> <divclass='box'> pageC <el-buttontype="primary"size="defa......
  • pyodbc库读取.xlsx的Sheet内容
    pyodbc库实现直接读取.xlsx数据库中的Sheet内容#导入数据库importpyodbcimportos#获取.xlsx绝对路径file_path=os.path.abspath('XXX.xlsx') print(file_path)#r表示非转义的原始字符串conn_info=r'DRIVER={MicrosoftExcelDriver(*.xls,*.xlsx,*.xlsm,*.xls......
  • Python中4种方法实现 xls 文件转 xlsx
    在Python中,可以采用pandas、pyexcel、win32com和xls2xlsx这四个模块,实现xls转xlsx格式。以Excel示例文件test_Excel.xls为例,具体内容如下图所示:1.pandas安装命令pipinstallpandas-ihttps://mirrors.aliyun.com/pypi/simple具体使用方法importpandasas......
  • 【Flowable | 第三篇】flowable工作流使用任务监听器、执行监听器
    文章目录4.flowable工作流使用任务监听器、执行监听器4.1任务监听器4.2执行监听器4.2配置任务/执行监听器4.2.1新增任务监听器4.2.2新增执行监听器4.2.2任务节点配置任务/执行监听器(1)选择类的类型(2)使用表达式类型(3)使用委托表达式4.3测试4.4小结4.flowable工作流使......