当前位置: 首页 > news >正文

ExcelJS 导入导出excel带下拉框筛选数据

import ExcelJS from "exceljs";

配上文档地址

下载方法

//数据格式
deviceJson:{
        't(数据类型)':[{value:0,label:'浮点'},{value:1,label:'整型'},{value:2,label:'布尔'},{value:3,label:'字符串'}],
        'o(读写方向)':[{value:0,label:'只读'},{value:1,label:'只写'},{value:2,label:'读写'}],
        'oc_sav(断线缓存)':[{value:0,label:'否'},{value:1,label:'是'}],
      }
let columnsFormulae = {
            'o(读写方向)':['只读','只写','读写'],
          }

const ExcelJSWb = new ExcelJS.Workbook();//创建实例
          const Sheet1 = ExcelJSWb.addWorksheet("Sheet1");//工作簿名称
          let columns = []//表头集合
          let columnsFormulae = []//下拉框数据集合
          //tagList  导出数据集合  
          //deviceJson  下拉框数据匹配集合 
          let keys = Object.keys(tagList[0])
          for (const key in tagList[0]) {
            if (Object.hasOwnProperty.call(tagList[0], key)) {
              const element = tagList[0][key];
              columns.push({
                header:key,
                key:key,
                width: 10,
                index:keys.indexOf(key)//记录表头下标 下拉数据使用
              })
              this.deviceJson[key] ? columnsFormulae[key] = this.deviceJson[key].map((item)=> item.label) : null
            }
          }
          Sheet1.columns = columns//导出表 赋值表头
          Sheet1.addRows(tagList);// 添加导出表体
          tagList.forEach((tag, idx) => {// 遍历表体 赋值 下拉框数据
            const row = idx + 2;
            columns.map((colu,num)=>{
              if (columnsFormulae.hasOwnProperty(colu.key)){
                let str = `"`+columnsFormulae[colu.key].join()+`"`
                Sheet1.getCell(row, num+1).dataValidation = {
                  type: "list",
                  formulae: [str]
                };
              }
            })
          });
writeBuffer 把写好的excel 转换成 ArrayBuffer 类型
          const buffer = await ExcelJSWb.xlsx.writeBuffer();
          _this.saveAs(
            new Blob([buffer], {
              type: "application/octet-stream",
            }),
            "deviceTag" +
              "." +
              (wopts.bookType == "biff2" ? "xls" : wopts.bookType)
          );

saveAs(obj, fileName) {
      //当然可以自定义简单的下载文件实现方式
      let tmpa = document.createElement("a");
      tmpa.download = fileName || "下载";
      tmpa.href = URL.createObjectURL(obj); //绑定a标签
      tmpa.click(); //模拟点击实现下载
      setTimeout(function () {
        //延时释放
        URL.revokeObjectURL(obj); //用URL.revokeObjectURL()来释放这个object URL
      }, 100);
    }

导入方法如下 input  change事件

<input  type="file"  style="display: none"   ref="input_file"   accept=".xlsx"   @change="importF" />

importF(evt) {
      let _this = this;
      let rABS = false;
      let obj = evt.target;
      let arr = evt.target.files[0].name.split(".");
      let len = evt.target.files[0].name.split(".").length;
      let typeName = arr[len - 1];
      if (typeName != "xlsx") {
        this.$message({
          type: "warning",
          message: "请上传.xlsx类型文件",
        });
        return;
      }
      if (!obj.files) {
        return;
      }
      let f = obj.files[0];
      let reader = new FileReader();
      reader.onload = function (e) {
        let data = e.target.result;
        let wb;
        if (rABS) {
          wb = XLSX.read(data, { type: "binary" });
        } else {
          let arr = _this.fixdata(data);
          wb = XLSX.read(btoa(arr), { type: "base64" });
        }
           //deviceTagList  导入数据集合
        let deviceTagList = XLSX.utils.sheet_to_json(
          wb.Sheets[wb.SheetNames[0]]
        );
if (rABS) reader.readAsBinaryString(f);
 else reader.readAsArrayBuffer(f);
},


http://www.taodudu.cc/news/show-6102276.html

相关文章:

  • 【physx/wasm】在physx中添加自定义接口并重新编译wasm
  • excel---常用操作
  • Lora训练Windows[笔记]
  • linux基础指令讲解(ls、pwd、cd、touch、mkdir)
  • InnoDB 事务处理机制
  • 启明云端ESP32 C3 模组WT32C3通过 MQTT 连接 AWS
  • 使用exceljs导出部门-职位联动下拉框的excel
  • 导出excel此单元格中的数字为文本格式,或者其前面有撇号
  • linux查找所有可用的摄像头
  • 树莓派安装mplayer,并使用命令查看摄像头
  • vue获取摄像头
  • 谷歌浏览器获取摄像头
  • 树莓派4b摄像头使能
  • Opencv根据USB摄像头PID\VID号,获取对应摄像头索引
  • rk3588调试之imx415摄像头
  • 推荐用于环境识别的机器人摄像头
  • python opencv 摄像头_opencv python中摄像头参数的设置
  • 树莓派CSI摄像头使用
  • leetcode 968 监控摄像头
  • 根据硬件ID查看摄像头型号方案,可查任何一款摄像头芯片来源
  • android查看摄像头信息,获取Android设备上的详细的摄像头信息
  • python获取摄像头型号_python opencv设置摄像头分辨率以及各个参数的方法_python
  • python获取摄像头型号,python3.6 opencv获取摄像头代码
  • 我的世界服务器自动被踢怎么可以进去,我的世界中国版服务器中如何解决玩家作弊的简单方法...
  • VS2019+WDK10编写xp平台的驱动
  • Windows XP中手动安装驱动程序的方法
  • xp驱动和Win7驱动的区别
  • windows XP 驱动开发环境搭建
  • 戴尔1420装XP方法和驱动
  • window XP驱动开发(一)如何下载WDK
  • Window XP驱动开发(十) 驱动程序的基本结构
  • (14)[驱动开发]配置环境 VS2019 + WDK10 写 xp驱动
  • Window XP驱动开发(二) 环境搭建(VS2008+WDK+DDKWzard)及示例源码分析
  • DBA必知的170张Oracle常用动态性能表介绍
  • Linux-tcpdump
  • 【Linux】定时任务crontab和at命令详解