<template> <div class="app-container"> <el-form ref="queryForm" size="small" :inline="true" > <el-form-item label="行" prop="row"> <el-input v-model="row" placeholder="请输入开始行" clearable @keyup.enter.native="handleEnter" maxlength="8" /> </el-form-item> </el-form> <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-upload type="file" name="file" ref="upload" :before-upload="handleFileChange" action='' :limit="1" :file-list="fileList" :show-file-list=false > <el-button plain size="mini" icon="el-icon-download" type="primary" >导入初始文件</el-button> </el-upload> </el-col> <el-col :span="1.5"> <el-upload type="file" name="file" ref="upload" :before-upload="handleFileChange1" action='' :limit="1" :file-list="fileList" :disabled="disableNextButton" :show-file-list=false > <el-button plain size="mini" icon="el-icon-download" type="primary" :disabled="disableNextButton" >导入对比文件</el-button> </el-upload> </el-col> <el-col :span="1.5"> <el-button type="warning" plain icon="el-icon-upload2" size="mini" @click="handleExport" v-hasPermi="['ruoyi-myexcel:myexcel:export']" >导出</el-button> </el-col> <el-col :span="1.5"> <el-button icon="el-icon-refresh" size="mini" @click="addToMap">生成</el-button> </el-col><el-col :span="1.5"> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> </el-col> </el-row> <!-- luckysheet容器 --> <div id="luckysheet" style="margin: 0px; padding: 0px; position: absolute; width: 100%;left: 0px; top: 120px; height: 1000px; z-index: 0" > </div> </div> </template> <script> /*import luckysheet from 'luckysheet'*/ import LuckyExcel from 'luckyexcel' //导入库export.js 这个文件是es6的,不能在普通的HTML文件直接引入js文件(虽然都是js文件,但是有区别,具体请百度es6与es5)!需要把es6转es5才可以直接引入使用! import { exportExcel } from '../../../../public/exportExcel'; import {vueScript} from "@/utils/generator/html"; var fileName="新建XLSX工作表"; //定义表名 var data1; var name1; var map=new Map(); export default { name: "Mymodule", data() { return { row:'', //弹出页面的表名 // 是否显示弹出层 fileList:[], disableNextButton: true, // 查询参数 queryParams: { status:0 }, }; }, created() { }, mounted() { this.init(); fileName="新建XLSX工作表"; }, methods:{ /** 回车事件和保存提交绑定 */ handleEnter(event) { if (event.keyCode === 13) { event.preventDefault(); // 阻止默认的回车事件 // 触发确定操作 this.handleFileChange1(); } }, /** 重置按钮操作 */ resetQuery() { //刷新下拉选框内容 fileName="新建XLSX工作表"; this.disableNextButton=''; this.row=""; //刷新luckysheet表格 this.init(); map.clear(); }, /** Luckyexcel文档 */ init() { let options = { container: 'luckysheet', //luckysheet为容器id title:'', lang:'zh', showinfobar:false, data:[ { "name": "sheet1", //工作表名称 "color": "", //工作表颜色 "index": 0, //工作表索引 "status": 1, //激活状态 "order": 0, //工作表的下标 "hide": 0,//是否隐藏 "row": 50, //行数 "column": 50, //列数 "defaultRowHeight": 19, //自定义行高 "defaultColWidth": 73, //自定义列宽 "celldata": [ ], //初始化使用的单元格数据 "config": { "merge": { }, //合并单元格 "rowlen":{}, //表格行高 "columnlen":{}, //表格列宽 "rowhidden":{}, //隐藏行 "colhidden":{}, //隐藏列 "borderInfo":{ }, //边框 "authority":{}, //工作表保护 }, }, /*{ "name": "Sheet2", "color": "", "index": 1, "status": 0, "order": 1, "celldata": [], "config": {} }, { "name": "Sheet3", "color": "", "index": 2, "status": 0, "order": 2, "celldata": [], "config": {}, }*/ ] } luckysheet.create(options); }, /** 导入事件*/ handleFileChange(evt) { this.disableNextButton=false; let name = evt.name let suffixArr = name.split('.'), suffix = suffixArr[suffixArr.length - 1] if (suffix !== 'xlsx') { this.$message({ message: "上传格式不正确,请上传xlsx格式文件", type: "warning"}); return } LuckyExcel.transformExcelToLucky( evt, (exportJson)=> { if (exportJson.sheets === null || exportJson.sheets.length === 0) { this.$message({ message: "导入失败,请检查上传的文件是否正确", type: "warning" }); return } luckysheet.destroy() luckysheet.create({ container: 'luckysheet', //luckysheet is the container id title: exportJson.info.name, lang: 'zh', // 设定表格语言 showinfobar: false, data: exportJson.sheets, userInfo: exportJson.info.name.creator }) data1=exportJson.sheets[0]; let suffixArr = exportJson.info.name.split('.'); fileName = suffixArr[0]; this.row=''; } ) }, /** 生成标签*/ addToMap(){ console.debug(map); map.forEach((value,key)=>{ for(let i=0;i<value.length;i++){ let row=value[i][0]-1,cell=value[i][1]-1; let sd=luckysheet.getCellValue(row,cell,{type:"ps"}); if(sd===null){ luckysheet.setCellValue(row, cell, {bg: "#e85f5f"}) luckysheet.setCellValue(row, cell, { ps: { //批注 "left": 92, //批注框左边距 "top": 10, //批注框上边距 "width": 91, //批注框宽度 "height": 48, //批注框高度 "value": key+"表有误", //批准内容 "isshow": false //批注框为显示状态 } }) }else{ let sd=luckysheet.getCellValue(row,cell,{type:"ps"}).value; luckysheet.setCellValue(row, cell, { ps: { //批注 "left": 92, //批注框左边距 "top": 10, //批注框上边距 "width": 91, //批注框宽度 "height": 48, //批注框高度 "value": sd+'\n;'+key+"表有误", //批准内容 "isshow": false //批注框为显示状态 } }) } } }) /*let num=luckysheet.getSheet().data[0].length; let data=luckysheet.getSheet().data; for(let j=0;j<map.size;j++){ let cell; for(let i=0;i<num;i++){ if(data[0][i]==null){ cell=i; break; } } let dfs=map.get(2); debugger let a=value.join("=="); luckysheet.setCellValue(j,cell,map); luckysheet.setCellValue(j,cell+1 ,); }*/ let cell; let num=luckysheet.getSheet().data[0].length; let data=luckysheet.getSheet().data; for(let j=0;j<map.size;j++){ for(let i=0;i<num;i++){ if(data[0][i]==null){ cell=i; break; } } } let k=0; for (let [key,value] of map.entries()) { let a="("+value.join("),(")+")"; luckysheet.setCellValue(k,cell,key); luckysheet.setCellValue(k,cell+1 ,a); k++ /*let k=0; map.forEach((value,key)=>{ let num=luckysheet.getSheet().data[0].length; let data=luckysheet.getSheet().data; let cell; for(let i=0;i<num;i++){ if(data[0][i]==null){ cell=i; break; } } let a=value.join("=="); luckysheet.setCellValue(k,cell,key); luckysheet.setCellValue(k,cell+1 ,a); k++ }) */ } }, handleFileChange1(evt) { if (this.row==="") { this.$message({ message: "请先输入导入开始的行", type: "warning"}); return false } let name = evt.name let suffixArr = name.split('.'), suffix = suffixArr[suffixArr.length - 1]; name=suffixArr[0] if (suffix !== 'xlsx') { this.$message({ message: "上传格式不正确,请上传xlsx格式文件", type: "warning"}); return } LuckyExcel.transformExcelToLucky( evt, (exportJson) =>{ if (exportJson.sheets === null || exportJson.sheets.length === 0) { this.$message({ message: "导入失败,请检查上传的文件是否正确", type: "warning" }); return } let ddd=data1; let as=0; let d1=window.luckysheet.transToData(ddd.celldata); let d2=window.luckysheet.transToData(exportJson.sheets[0].celldata); name1=exportJson.sheets[0].name; let array=[]; let r=this.row-1; try { for(let i=r;i<d1.length;i++) { for (let j = 0; j <=d1[0].length; j++) { if(d1[i][j]==null){ break } if(d2[i][j]==null){ break } if (d1[i][j].m==undefined && d2[i][j].m==undefined){ }else if (d1[i][j].m==undefined || d2[i][j].m==undefined){ luckysheet.setCellValue(i, j, {bg: "#e85f5f"}) as++ array.push([i+1,j+1]); }else { if (d1[i][j].m!= d2[i][j].m) { luckysheet.setCellValue(i, j, {bg: "#e85f5f"}) //查看是否有标签 /*luckysheet.setCellValue(i, j, { ps: { //批注 "left": 92, //批注框左边距 "top": 10, //批注框上边距暖色 "width": 91, //批注框宽度 "height": 48, //批注框高度 "value": this.dep+"表有误", //批准内容 "isshow": false //批注框为显示状态 } })*/ as++ array.push([i+1,j+1]); } } } } map.set(name1,array); if(as>0){ this.$message({ message: "导入完成,本次导入共发现"+as+"条不同数据", type: "warning"}); }else{ this.$message({ message: "导入完成,本次导入未发现不同数据", type: "success"}); } }catch (err){ this.$message({ message: "导入失败,导入文件与对比文件有所不匹", type: "error"}); } } ) }, /** 导出设置 */ handleExport: debounce(function() { // 处理点击事件 exportExcel(luckysheet.getSheet(),fileName+"(对比后数据)") }, 500), // 设置延迟时间,单位为毫秒 } // 配置项111 }; // debounce函数定义 function debounce(func, delay) { let timer; return function () { const context = this; const args = arguments; clearTimeout(timer); timer = setTimeout(function () { func.apply(context, args); }, delay); }; } </script>