easypoi使用检验导入excel数据

1.首先看见ExcelImportResult类发现
在这里插入图片描述

//这个方法返回了上述实体
public static <T> ExcelImportResult<T> importExcelMore(File file, Class<?> pojoClass,
                                                             ImportParams params) {
        FileInputStream in = null;
        try {
            in = new FileInputStream(file);
            return new ExcelImportService().importExcelByIs(in, pojoClass, params, true);//看一下参数ImportParams params参数
        } catch (ExcelImportException e) {
            throw new ExcelImportException(e.getType(), e);
        } catch (Exception e) {
            LOGGER.error(e.getMessage(), e);
            throw new ExcelImportException(e.getMessage(), e);
        } finally {
            IOUtils.closeQuietly(in);
        }
    }
public class ImportParams extends ExcelBaseParams {

    public static final String SAVE_URL = "/excel/upload/excelUpload";

    /**
     * 表格标题行数,默认0
     */
    private int                 titleRows        = 0;
    /**
     * 表头行数,默认1
     */
    private int                 headRows         = 1;
    /**
     * 字段真正值和列标题之间的距离 默认0
     */
    private int                 startRows        = 0;

    /**
     * 主键设置,如何这个cell没有值,就跳过 或者认为这个是list的下面的值
     * 大家不理解,去掉这个
     */

    private Integer             keyIndex         = null;
    /**
     * 开始读取的sheet位置,默认为0
     */
    private int                 startSheetIndex  = 0;
    /**
     * 上传表格需要读取的sheet 数量,默认为1
     */
    private int                 sheetNum         = 1;
    /**
     * 是否需要保存上传的Excel,默认为false
     */
    private boolean             needSave         = false;
    /**
     * **校验组**
     */
    private Class[]             verifyGroup = null;
    /**
     * 是否需要校验上传的Excel,默认为false
     */
    private boolean             needVerify = false;
    /**
     * 校验处理接口
     */
    private IExcelVerifyHandler verifyHandler;
    /**
     * 保存上传的Excel目录,默认是 如 TestEntity这个类保存路径就是
     * upload/excelUpload/Test/yyyyMMddHHmss_***** 保存名称上传时间_五位随机数
     */
    private String              saveUrl          = SAVE_URL;
    /**
     * 最后的无效行数
     */
    private int                 lastOfInvalidRow = 0;
    /**
     * 手动控制读取的行数
     */
    private int                 readRows = 0;
    /**
     * 导入时校验数据模板,是不是正确的Excel
     */
    private String[]            importFields;
    /**
     * 导入时校验excel的标题列顺序。依赖于importFields的配置顺序
    */
    private boolean             needCheckOrder = false;
    /**
     * Key-Value 读取标记,以这个为Key,后面一个Cell 为Value,多个改为ArrayList
     */
    private String              keyMark = ":";
    /**
     * 按照Key-Value 规则读取全局扫描Excel,但是跳过List读取范围提升性能
     * 仅仅支持titleRows + headRows + startRows 以及 lastOfInvalidRow
     */
    private boolean             readSingleCell = false;
    /**
     * 是否并行计算
     */
    private boolean             concurrentTask = false;
    /**
     * 最小截取大小
     */
    private Integer             critical = 1000;
}

看上述发现verifyGroup和needVerify就是检验的组和是否检验,意思是我们设置好grope和把needVerify设置为true就可以检验。支持validator。
然而设置完成后发现只有失败的list,并没有失败的原因,但failworbook里面有。因为检验数据是想导出就导出的,就想用到redis但是百度发现redis不能存worbook,于是就想找到list中有错误信息的,然后发现
在这里插入图片描述
意思是,如果IExcelModel是IExcelModel的子类就执行model.setErrorMsg(errorMsg);就能把错误信息弄进去了。
还看见一个这个:
在这里插入图片描述
但是点进去看,它们只有get和set方法并没有字段,所以我们要定义一个类:

@Data
public class ExcelVerifyInfo implements IExcelModel, IExcelDataModel {
    /**
     * 错误信息
     */
    private String errorMsg;
    /**
     *  行号
     */
    @ExcelIgnore
    private int rowNum;
}

这样就可以了,我们需要检验的实体就继承这个类就可以导出错误信息了需要加上@Excel(name = “错误信息”),但是导出模板的时候并不想要导出错误信息和错误行这两个字段,这个,想了个方法就是再创建一个类有这两个注解可以导出,但是缺点就是只有错误信息和行数,百度也没有发现自定义删选导出还是不导出的,,,,如果你们发现好方法渴望分享。

源代码:

/**
 * @author Lorde
 * @description
 * @date 2021/1/27
 */
public class ExcelTestUtils {

    public static <T>ExcelImportResult<T> importDataMore(MultipartFile file, Integer headerRows, Class<T> pojoClass, Class[] grope){
        if (file == null) {
            return null;
        }
        ImportParams params = new ImportParams();
        params.setVerifyGroup(grope);
        params.setHeadRows(headerRows);
        params.setNeedVerify(true);
        ExcelImportResult<T> objectExcelImportResult = null;
        try {
            objectExcelImportResult = ExcelImportUtil.importExcelMore(file.getInputStream(), pojoClass, params);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return objectExcelImportResult;
    }

}

成果:在这里插入图片描述
看到这就很开心了吧,但其实不止这样,我发现你就算中间空着在很后面找到数据,只会校验你写了数据的那一行。图中获取不到是因为类型不匹配没有赋值成功。。
我的实体:
在这里插入图片描述

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在Vue中使用EasyPoi导入Excel文件,需要进行以下步骤: 1. 安装EasyPoi 在Vue项目中使用EasyPoi需要先安装EasyPoi,可以通过npm进行安装: ``` npm install easypoi --save ``` 2. 创建Excel文件上传组件 在Vue项目中创建一个Excel文件上传组件,可以使用第三方组件库如ElementUI或者自己编写组件。 3. 实现Excel文件上传功能 在Excel文件上传组件中实现文件上传功能,并在上传成功后调用EasyPoi导入方法将Excel文件中的数据导入到Vue项目中。示例代码如下: ```javascript import { importExcel } from 'easypoi'; export default { methods: { handleFileUpload(file) { importExcel(file.raw, { // 配置导入参数 }).then(data => { // 处理导入后的数据 }).catch(error => { // 处理导入失败的情况 }); } } } ``` 在上述代码中,`handleFileUpload`方法表示文件上传成功后的回调函数,其中`importExcel`方法是EasyPoi提供的导入Excel文件的方法,它接受两个参数:Excel文件数据导入参数。导入成功后,可以对导入数据进行处理。 4. 配置导入参数 在导入Excel文件时,可以配置一些参数来控制导入的过程,如表头行数、数据行数、数据类型等。示例代码如下: ```javascript import { importExcel } from 'easypoi'; export default { methods: { handleFileUpload(file) { importExcel(file.raw, { // 配置导入参数 titleRows: 1, // 表头行数,默认为1 startRows: 2, // 数据行开始行数,默认为2 type: 'array' // 导入数据类型,默认为array }).then(data => { // 处理导入后的数据 }).catch(error => { // 处理导入失败的情况 }); } } } ``` 在上述代码中,`titleRows`表示表头的行数,默认为1;`startRows`表示数据行的开始行数,默认为2;`type`表示导入数据的类型,默认为array。 5. 处理导入后的数据导入Excel文件后,可以对导入数据进行处理。如将数据存储到数据库中、显示到页面上等。示例代码如下: ```javascript import { importExcel } from 'easypoi'; export default { data() { return { tableData: [] // 表格数据 } }, methods: { handleFileUpload(file) { importExcel(file.raw, { // 配置导入参数 }).then(data => { // 处理导入后的数据 this.tableData = data; }).catch(error => { // 处理导入失败的情况 }); } } } ``` 在上述代码中,`tableData`是Vue组件中用来存储导入后的数据的数组,当导入成功后,将数据存储到该数组中,然后可以在页面上显示出来。 这就是在Vue中使用EasyPoi导入Excel文件的步骤。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值