马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
这个需求是公司之前筹划开发的一个项目须要,背面公司并没有开始这个项目,但是我之前稍微弄了一点,以是也在此记载吧。需求是须要在 wps 大概 excel 的表格中复制一个表格,然后在前端的表格中主动根据 姓名 去举行添补,下面我来演示一下功能。
wps 的表格:
前端表格:
我们把刚刚从 wps 复制的表格 到我们前端的表格 举行 粘贴:
来大概说一下过程,提供思绪,不外代码是之前写的了,只能说个大概
利用的前段表格控件是 lucksheet,官网地点: Luckysheet 已不再维护,保举利用 Univer 更换 | Luckysheet文档
lucksheet 给我们提供了一个设置 rangePasteBefore,可以举行选区利用
我的思绪就是可以获取到须要粘贴的数据,然后又可以获取到表格的数据,对比两份数据,找到 姓名 那一行,举行处理处罚,处理处罚完之后再添补到前端表格
下面来看一下我的代码,留意,代码中已经写了必须是根据 姓名来匹配数据,须要根据其他的,你们本身调解,在我的代码中会报错,我没有继续研究这个东西了,以是没有处理处罚。
内里会用到 lucksheet 的依赖,这是我上传的依赖地点 ,解压后和代码文件放在同级目次下就可以
大概你们可以看官网的,用官网上面的,重要是 rangePasteBefore 方法内里的内容
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Document</title>
- <link rel="stylesheet" href="./dist/plugins/css/pluginsCss.css" />
- <link rel="stylesheet" href="./dist/plugins/plugins.css" />
- <link rel="stylesheet" href="./dist/css/luckysheet.css" />
- <link rel="stylesheet" href="./dist/assets/iconfont/iconfont.css" />
- <script src="./dist/plugins/js/plugin.js"></script>
- <script src="./dist/luckysheet.umd.js"></script>
- <style>
- .ipt {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 10;
- }
- </style>
- </head>
- <body>
- <input class="ipt" type="file" />
- <div id="luckysheet" style="
- margin: 0px;
- padding: 0px;
- position: absolute;
- width: 100%;
- height: 100%;
- left: 0px;
- top: 0px;
- "></div>
- <script>
- $(function () {
- //配置项
- var options = {
- container: "luckysheet", //luckysheet为容器id
- title: "表格的名字", // 设定表格名称
- lang: "zh", // 设定表格语言
- allowCopy: false, // 是否可复制
- showtoolbarConfig: {
- // undoRedo: false, //撤销重做,注意撤消重做是两个按钮,由这一个配置决定显示还是隐藏
- // paintFormat: false, //格式刷
- // currencyFormat: false, //货币格式
- // percentageFormat: false, //百分比格式
- // numberDecrease: false, // '减少小数位数'
- // numberIncrease: false, // '增加小数位数
- // moreFormats: false, // '更多格式'
- // font: false, // '字体'
- // fontSize: false, // '字号大小'
- // bold: false, // '粗体 (Ctrl+B)'
- // italic: false, // '斜体 (Ctrl+I)'
- // strikethrough: false, // '删除线 (Alt+Shift+5)'
- // underline: false, // '下划线 (Alt+Shift+6)'
- // textColor: false, // '文本颜色'
- // fillColor: false, // '单元格颜色'
- // border: false, // '边框'
- // mergeCell: false, // '合并单元格'
- // horizontalAlignMode: false, // '水平对齐方式'
- // verticalAlignMode: false, // '垂直对齐方式'
- // textWrapMode: false, // '换行方式'
- // textRotateMode: false, // '文本旋转方式'
- // image: false, // '插入图片'
- // link: false, // '插入链接'
- // chart: false, // '图表'(图标隐藏,但是如果配置了chart插件,右击仍然可以新建图表)
- // postil: false, //'批注'
- // pivotTable: false, //'数据透视表'
- // function: false, // '公式'
- // frozenMode: false, // '冻结方式'
- // sortAndFilter: false, // '排序和筛选'
- // conditionalFormat: false, // '条件格式'
- // dataVerification: false, // '数据验证'
- // splitColumn: false, // '分列'
- // screenshot: false, // '截图'
- // findAndReplace: false, // '查找替换'
- // protection: false, // '工作表保护'
- // print: false, // '打印'
- },
- showsheetbarConfig: {
- // add: false, //新增sheet
- // menu: false, //sheet管理菜单
- // sheet: false, //sheet页显示
- },
- showstatisticBar: false,
- showstatisticBarConfig: {
- zoom: true,
- },
- sheetRightClickConfig: {
- delete: false, // 删除
- copy: false, // 复制
- rename: false, //重命名
- color: false, //更改颜色
- hide: false, //隐藏,取消隐藏
- move: false, //向左移,向右移
- },
- rowHeaderWidth: 88,
- pager: {
- pageIndex: 1, //当前的页码
- pageSize: 10, //每页显示多少行数据
- total: 50, //数据总行数
- selectOption: [10, 20], //允许设置每页行数的选项
- },
- cellUpdateBefore(r, c) {
- console.log(r, c, "rc");
- },
- hook: {
- rangePasteBefore: function (range, data) {
- console.info("range", range);
- // console.info("data", data);
- // console.log("range", range);
- // console.log("data", data);
- // console.log(
- // luckysheet.getAllSheets()[0],
- // "luckysheet.getAllSheets()[0]"
- // );
- const originArr = luckysheet.getSheetData();
- // console.log(originArr, "getSheetData");
- // 创建一个虚拟的DOM元素,加载HTML内容
- // #region
- const parser = new DOMParser();
- const htmlDoc = parser.parseFromString(data, "text/html");
- // 获取包含表格数据的table元素
- const table = htmlDoc.querySelector("table");
- // 初始化空数组用于存储提取的数据
- const arr = [];
- // 遍历表格的每一行
- table.querySelectorAll("tr").forEach((row) => {
- const rowData = [];
- // 遍历当前行的每个单元格
- row.querySelectorAll("td").forEach((cell) => {
- // 提取单元格的文本内容并添加到当前行数据中
- rowData.push(cell.textContent.trim());
- });
- // 将当前行数据添加到数组中
- arr.push(rowData);
- });
- // // 输出提取的数组
- // console.log(arr, "arr");
- // //#endregion
- function findMatches(arr, originArr) {
- // 初始化结果数组
- let mateArr = [];
- // 获取表头,即arr的第一行数据
- let headers = arr[0];
- // 获取两张表的姓名所在索引
- let arrNameIndex = headers.findIndex((el) => el === "姓名");
- let originArrNameIndex = originArr[0].findIndex(
- (el) => el.v === "姓名"
- );
- // 遍历arr中除表头外的每一行
- for (let i = 1; i < arr.length; i++) {
- // 遍历每一列
- for (let j = 0; j < arr[i].length; j++) {
- // 获取当前单元格的值
- let cellValue = arr[i][j];
- // 查找在originArr中对应的行索引
- let rowIndex = originArr.findIndex(
- (obj) =>
- obj &&
- obj[originArrNameIndex].v === arr[i][arrNameIndex]
- );
- // 查找在originArr中对应的列索引
- let columnIndex = originArr[0].findIndex(
- (obj) => obj && obj.v === headers[j]
- );
- // 如果找到对应的列
- if (columnIndex !== -1 && rowIndex !== -1) {
- // 将行索引、列索引和单元格值添加到结果数组
- mateArr.push([rowIndex, columnIndex, cellValue]);
- }
- }
- }
- return mateArr;
- }
- // 使用示例
- const mateArr = findMatches(arr, originArr);
- // console.log(mateArr, "mateArr");
- mateArr.forEach((el, index) => {
- luckysheet.setCellValue(el[0], el[1], el[2]);
- });
- // luckysheet.setCellValue(48, 2, "有值了吗");
- return false; //Can intercept paste
- },
- },
- };
- luckysheet.create(options);
- // console.log(luckysheet.luckysheetfile[0].data, "luckysheetfile");
- console.log(luckysheet.getCellValue(0, 0), "123");
- // window.luckysheet.setCellValue(0, 0, "有值了吗");
- // setTimeout(() => {
- // luckysheet.setCellValue(0, 0, "有值了吗");
- // console.log(
- // luckysheet.getAllSheets()[0],
- // "luckysheet.getAllSheets()[0]"
- // );
- // }, 2000);
- });
- </script>
- </body>
- </html>
复制代码
|