首页 > 其他分享 >记录实现复制EXCEL数据到前端表单

记录实现复制EXCEL数据到前端表单

时间:2023-07-22 14:23:05浏览次数:40  
标签:数据 前端 单元格 EXCEL 表单 item clipboardData 黏贴 data

  背景是用户需要把原本在Excel上填报的数据搬运到线上系统进行填报,在做了一个带输入框的表格之后用户提出希望能够实现将EXCEL上的数据复制黏贴到这个表格里的功能。

  实现功能的整体思路是在input框上监听黏贴事件,获取到复制的数据。由于在Excel 中\t 表示换格,\n表示换行,所以我们可以根据此特性得到复制的数据一共是是几行几列,生成一个相对应的二维数组,在通过循环二维数组给相对应的单元格赋值。

 

1.监听黏贴事件。

  
  <el-table-column v-for="(item, index) in tableTitle" :prop="item" :label="item" width="70">

                                    <template slot-scope="scope2">
                                        <div v-if="scope2.row.isSelected">
                                            <el-input v-model="scope2.row[item]" class="tableInput"
                                                @paste.native="pasteExcel($event, scope2.$index, index, scope.row)"></el-input>
                                        </div>
                                        <div v-else>{{ scope2.row[item] }}</div>
                                    </template>


                                </el-table-column>

2. 读取剪切板的数据并且根据\n,\t分割成数组

var data = null;
            var clipboardData = window.clipboardData || event.clipboardData; // IE || chrome
            data = clipboardData.getData('Text');
            console.log(data);


            console.log(data.replace(/\t/g, '\\t').replace(/\n/g, '\\n')); //data转码
            //解析数据
            var arr = data.split('\n')
                .filter(function (item) {    //兼容Excel行末\n,防止出现多余空行
                    return (item !== "")
                }).map(function (item) {
                    return item.split("\t");
                });

 3.循环读取数组给相应的单元格赋值,这边需要注意的是要确定点击黏贴的单元格处于第几行第几列,这样才能正确的把后续的值赋值到对的地方,因为我这边表格是通过 v-for="(item, index) in tableTitle" 来动态生成的,所以通过传递 index就可以确定列,通过插槽中的scope.$index传递行数。

 

4.一切完成后我发现除了点击粘体的那个单元格,其他单元格都可以正常赋值,只有第一个单元格除了本该属于他的数据外还会将复制下来的数据全部黏贴上去。后续经过一番搜索发现是因为点击粘体后再执行完我们自己的方法后还是把剪贴板的所有数据复制到第一个单元格了,所以我们需要把页面的黏贴功能拦截。

document.addEventListener('paste', e => {
    e.preventDefault();
    e.stopPropagation();
})

 

 

标签:数据,前端,单元格,EXCEL,表单,item,clipboardData,黏贴,data
From: https://www.cnblogs.com/hegn/p/17573308.html

相关文章

  • EasyExcel
    依赖配置:<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel<artifactId><version>2.2.0-beta2</version></dependency>实体类配置:@DatapublicclassSubjectEeVo{@ExcelProperty(val......
  • 前端实现浏览器端大文件分块上传
    ​  上周遇到这样一个问题,客户上传高清视频(1G以上)的时候上传失败。一开始以为是session过期或者文件大小受系统限制,导致的错误。查看了系统的配置文件没有看到文件大小限制,web.xml中seesiontimeout是30,我把它改成了120。但还是不行,有时候10分钟就崩了。同事说,可能是客户这......
  • 10个开源的前端低代码项目
    GOVIEWGoView是一个使用Vue3搭建的低代码数据可视化开发平台,将图表或页面元素封装为基础组件,无需编写代码即可完成业务需求。它的技术栈为:Vue3+TypeScript4+Vite2+NaiveUI+ECharts5+Axios+Pinia2+PlopJS。Gitee:https://gitee.com/dromara/go-viewvlife企业级......
  • 【补充】前端渲染文本属性的标签样式
    【补充】前端渲染文本属性的标签样式【1】直接修改标签的值(Directlymodifyingthevalueofatag):这种方式适用于需要将数据直接插入到HTML标签中的情况。一种常用的方法是使用jQuery库来选中需要修改的标签并使用.html()方法来设置新的值。例如:$('#digg_tips').html(......
  • Excel工具使用
    一、函数1、前言在Excel单元格中的函数名称都是大写字母,即使在输入函数时使用了小写字母,在按下Enter键后,Excel也会自动将函数名称转为大写字母,因此为了确保在公式中输入正确的函数名,我们可以在输入时使用小写字母,这样如果函数名称有误,那么在按下Enter键时Excel不会将小写字......
  • 发现在elementui使用xlsx导出excel时会有重复的数据
    原因是由于elementui中的固定列产生的影响,doExportExcel(){//导出为excel    letwb=''    letxlsxParam={raw:true}    letfix=document.querySelector(".el-table__fixed-right")    if(fix){     wb=XLSX.uti......
  • 基于vite的前端模板库create-xg
    一个类似于create-vite的快速生成模板,因为create-vite创建的项目模板只有最基础的东西,仍然需要安装第三方依赖如ui库等,还未达到开箱即用的程度。于是自己动手实现一个类似的模板库,包含vue/react、路由、ui库、axios、mock数据,可以在此基础上直接开发业务代码,避免重复的环境搭......
  • 解决element ui 下拉框表单验证切换选项就直接触发的问题
    elementui下拉框表单验证正确使用步骤1.确保form组件的:model属性绑定了表单的数据对象  2.确保form组件的rules绑定了对应的rule 3.确认要验证的表单item绑定了对应的prop属性注意:prop属性的名称要和rule里面的名称一样并且和v-model的属性名称一样才行 完成以上......
  • python excel 怎么换行列
    PythonExcel换行列的解决方案在处理Excel文件时,有时候需要将一列的数据进行换行操作,即将一列的数据拆分为多行显示。本文将介绍如何使用Python解决这个问题。准备工作首先,我们需要安装openpyxl库,它是一个用于处理Excel文件的Python库。可以使用以下命令进行安装:pipinstallop......
  • python excel 去掉多列
    PythonExcel去掉多列实现方法引言在日常的数据处理工作中,经常会遇到需要处理Excel文件的情况,其中一项常见的操作是去掉不需要的列。本文将教你如何使用Python来实现去掉多列操作。整体流程以下是去掉多列的步骤概览:步骤描述步骤一打开Excel文件步骤二选择要去......