LAY-EXCEL实现导入和导出excel功能

});
return param;
}


### 1.3  index.vue文件


        这里先准备好页面中html部分、变量定义和使用的相关事件函数定义好,代码如下:




        由于这里使用的是element-ui组件,组件已将布局样式写好,这里index.scss文件就不讲解了。


        此时页面效果如下:


![](https://img-blog.csdnimg.cn/19fb992af9b34bd28b584acc55c7a9e3.png)


## 二、导入数据


### 2.1 导入按钮


        由于导入是需要选择文件,所以在导入按钮前面添加一个隐藏的type=file标签,当点击导入按钮时触发uploadFileEvent()事件函数。



<input hidden
ref=“excel-upload-input”
class=“excel-upload-input”
type=“file”
accept=“.xlsx, .xls”
@change=“uploadFileEvent”
>
<el-button size=“small” type=“primary” @click=“importEvent”>导入


### 2.2 选择文件


        当点击导入按钮时,通过JS触发选择文件事件,代码如下:



/**

  • 导入点击事件
    */
    importEvent(){
    this.$refs[‘excel-upload-input’].click();
    }

### 2.3 配置参数


        importExcel配置参数:




| 参数名称 | 描述 | 默认值 |
| --- | --- | --- |
| files | FileList 对象(通常来自于 input[type='file'] 元素的 files 属性 ) | undefined |
| opt | 导出参数配置,详见下方描述 | undefined |
| callback | 完全读取完毕的回调函数,传入一个参数「data」表示所有数据的集合 | undefined |


        opt配置参数:




| 参数名称 | 描述 | 默认值 |
| --- | --- | --- |
| header | 导入参数的headers,支持"A"、1等 | A |
| range | 读取的范围,支持数字、字符等 | null |
| fields | 可以在读取的过程中进行数据梳理 | null |


         filterImportData参数配置:




| 参数名称 | 描述 | 默认值 |
| --- | --- | --- |
| data | 导入的数据(文件维度) | undefined |
| fields | 可以在读取的过程中进行数据梳理 | undefined |



> 
> 注:梳理导出的数据,包括字段排序和多余数据过滤,filterImportData()函数与 importExcel 的 field 字段含义一致
> 
> 
> 
> 由于处理过程中会抛出一些异常,所以请使用 try{}catch(e){}接收并提示用户!
> 
> 
> 
> 有以下两种方式可以梳理数据:
> 
> 
> * 调用 filterImportData(data, fields)
> * 直接在 importExcel() 的 opt 配置中进行数据梳理
> 
> 
> 



### 2.4 数据处理


        当用户选择excel文件时,opt参数什么都不填,代码如下:



/**

  • 选择导入文件

  • @param {Object} e
    */
    uploadFileEvent(e){
    try{
    const files = e.target.files;
    const rawFile = files[0];
    if(!rawFile) return;

    LAY_EXCEL.importExcel(files, {}, data => {
    console.log(data);
    });
    }catch(e){
    console.error(“error:”, e);
    }
    }


        此时控制台输入数据结构如下图:


![](https://img-blog.csdnimg.cn/fbb14332a50e45f08f387d1e5a7f29d3.png)


###  2.5 filterImportData


        先使用filterImportData疏导数据,代码如下:



LAY_EXCEL.importExcel(files, {}, data => {
//列名转换方法
data = LAY_EXCEL.filterImportData(data, importParam());

console.log(data);

});


        控制台输出数据结构如下:


![](https://img-blog.csdnimg.cn/1a8104fd0c12439aa8d6e4c33fe73bd8.png)


        此时则拿到了所需要的JSON数据,后期可以将其赋值给页面tableData变量,也可将数据先存储库中再读取显示,根据自己业务需求进行处理即可。


### 2.6 fields字段


        也可以在读取过程中梳理数据,这里使用fields字段,代码如下:



LAY_EXCEL.importExcel(files, {
fields: importParam()
}, data => {
console.log(data);
});


        控制台输出数据结构如下:


![](https://img-blog.csdnimg.cn/1a8104fd0c12439aa8d6e4c33fe73bd8.png)


       在2.5和2.6中演示结果来看,两种疏理数据方式结果是一样的,可根据业务需求选择一种即可。


### 2.7 显示数据


        这里使用fields配置完成梳理数据,将获取数据赋值给表格绑定的变量tableData。此时会发现第一行标题也被导入到数据列表中了,使用shift()函数将第一行去除掉即可。代码如下:



/**

  • 选择导入文件

  • @param {Object} e
    */
    uploadFileEvent(e){
    try{
    const files = e.target.files;
    const rawFile = files[0];
    if(!rawFile) return;

    LAY_EXCEL.importExcel(files, {
      fields: importParam()
    }, data => {
      let newData = data[0]['Sheet 1'];
    
      if(Array.isArray(newData)){
        newData.shift();    //删除第一行标题数据
    
        // 赋值给表格列表
        this.tableData = newData;
    
        //do something...
    
      }else{
        this.tableData = [];
      }
    
      // console.log(newData);
    });
    

    }catch(e){
    console.error(“error:”, e);
    }
    }


        导入后页面效果如下:


![](https://img-blog.csdnimg.cn/8dd6985a9cca481fa3045c81bbaab693.png)




## 三、导出数据


        导出是本插件的核心功能,用于将接口中的数据/界面上的数据以生成excel文件的方式给用户下载,在设计函数的时候尽量接近实际场景,开发了诸如 filterExportData 辅助梳理数据,setExportCellStyle 辅助添加样式,setRoundBorder 用于调整边框等。


### 3.1 配置参数


        exportExcel参数配置:




| 参数名称 | 描述 | 默认值 |
| --- | --- | --- |
| data | 数据列表(需要指定表名) | 必填 |
| filename | 文件名称(带后缀) | 必填 |
| type | 导出类型,支持 xlsx、csv、ods、xlsb、fods、biff2 | xlsx |
| opt | 其他可选配置 | null |


        opt参数配置项:




| 参数名称 | 描述 | 默认值 |
| --- | --- | --- |
| Props | 配置文档基础属性,支持Title、Subject、Author、Manager、Company、Category、Keywords、Comments、LastAuthor、CreatedData | null |
| extend | 表格配置参数,支持 !merge (合并单元格信息)、!cols(行数)、!protect(写保护)等,原生配置请参考,其中 !merge 配置支持辅助方法生成,详见 makeMergeConfig(origin)! | null |
| compression | 是否压缩,压缩效果比较明显,建议开启(9列9w行有较多重复的数据,从 30M 缩小到 3M) | true |
| writeOpt | 写入函数的可选项覆盖,一般用默认生成的配置即可,具体请查看 Writing Options | undefined |


        filterExportData参数配置:




| 参数名称 | 描述 | 默认值 |
| --- | --- | --- |
| data | 需要梳理的数据 | 必填 |
#### 算法刷题

大厂面试还是很注重算法题的,尤其是字节跳动,算法是问的比较多的,关于算法,推荐《LeetCode》和《算法的乐趣》,这两本我也有电子版,字节跳动、阿里、美团等大厂面试题(含答案+解析)、学习笔记、Xmind思维导图均可以分享给大家学习。



![](https://img-blog.csdnimg.cn/img_convert/c582a01373152bb4cd38bc6ad5cc8027.png)



**写在最后**

**最后,对所以做Java的朋友提几点建议,也是我的个人心得:**

1.  疯狂编程

2.  学习效果可视化

3.  写博客
4.  阅读优秀代码
5.  心态调整


  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: lay-submit和lay-filter是layui框架中的两个重要属性。 lay-submit是表单提交按钮的属性,用于指定表单提交的按钮。当用户点击该按钮时,会触发表单的提交事件。 lay-filter是表单过滤器的属性,用于指定表单的过滤器。当表单提交时,会先执行过滤器函数,然后再执行表单提交事件。过滤器函数可以用来验证表单数据的合法性,如果数据不合法,可以阻止表单提交,或者给出错误提示。 总之,lay-submit和lay-filter是layui框架中非常重要的属性,可以帮助我们更方便地处理表单提交和数据验证。 ### 回答2: lay-submit和lay-filter在layui框架中是两个重要的属性。lay-submit被用来定义某个表单中提交按钮的样式及其事件。而lay-filter则是用来标识表单的唯一标识,在接收表单数据时方便识别。 lay-submit的作用: 在layui框架中,我们需要使用表单来进行数据的输入和提交。通常,每个表单中都会有一个提交按钮,这个按钮会触发表单提交事件。在layui中,我们可以使用lay-submit来定义某个表单中的提交按钮的样式及其事件。 具体来说,我们可以通过以下代码来实现: <form class="layui-form" action=""> <!-- 表单项等 --> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="formDemo">提交</button> </div> </div> </form> 在上述代码中,通过添加属性lay-submit和lay-filter来定义提交按钮的样式和事件。其中,lay-submit表示当前按钮为表单提交按钮,而lay-filter则是为了识别这个表单的唯一标识。 使用lay-filter的作用: 在layui框架中,lay-filter被广泛用于标识表单的唯一标识。这个标识在表单提交时是非常重要的,因为它能够方便地识别表单的内容并接收表单提交的数据。 具体来说,在我们需要提交表单数据时,我们可以使用以下代码: layui.use('form', function(){ var form = layui.form; //监听提交 form.on('submit(formDemo)', function(data){ layer.msg(JSON.stringify(data.field)); return false; }); }); 在上述代码中,我们使用了表单的唯一标识lay-filter="formDemo"来监听表单的提交事件,并通过将表单数据转化为JSON格式来获取表单提交的数据。 因此,lay-submit和lay-filter在layui框架中是非常重要的属性,他们分别被用于定义表单提交按钮的样式和事件,以及方便识别表单的唯一标识。在layui的表单开发中,我们经常需要使用这两个属性来实现表单的提交和数据接收。 ### 回答3: lay-submit lay-filter 是 layui 框架中常见的两个属性。lay-submit 用于定义一个表单内提交按钮的行为,而 lay-filter 则用于定义表单元素的筛选器,用于过滤表单中的元素。 在 layui 中,使用 lay-submit 定义按钮的行为时,需要将它作为 button 元素的一个属性来使用。例如: <button lay-submit>提交</button> 这将会给按钮绑定默认的提交表单事件。当按钮被点击时,直接触发表单提交行为。 此外,如果使用 layui.form 做表单的渲染,可以在 form 元素上设置 lay-filter,用于筛选出需要操作的表单元素。例如: <form class="layui-form" lay-filter="form-demo"> <div class="layui-form-item"> <label class="layui-form-label">用户名</label> <div class="layui-input-block"> <input type="text" name="username" required lay-verify="required" placeholder="请输入用户名" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">密码</label> <div class="layui-input-block"> <input type="password" name="password" required lay-verify="required" placeholder="请输入密码" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="form-demo">提交</button> </div> </div> </form> 在上面的代码中,表单使用了 lay-filter="form-demo",而提交按钮也使用了 lay-filter="form-demo"。这样,当按钮被点击时,就会触发表单提交行为,并且只有表单内带有 lay-filter="form-demo" 的元素才会被提交。 总之,lay-submit lay-filter 在 layui 中经常被用来定义表单的行为和筛选表单元素,是一个比较常见的功能组合。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值