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);
},
ExcelJS 导入导出excel带下拉框筛选数据相关推荐
- java导出Excel增加下拉框选项,解决小数据量和大数据量下拉框选项的问题
文章目录 java导出Excel增加下拉框选项 一.小数据量情况 二.大数据量情况 java导出Excel增加下拉框选项(java结合easyExcel) 添加传参模型ConsumablesAddDT ...
- 通过Excel制作下拉框筛选出成绩
目录 一.效果展示: 二.方法步骤: 1.先打开"开发者工具" 打开选项--自定义功能区--勾选开发者工具 2.选择插入组合框(窗体软件) 编辑 3.画出来后右键-设置控件格式 ...
- EasyExcel在项目中的应用-在web中导出带下拉框和批注的excel文件
前言 好长一段时间没有更新博客了,最近刚刚找到实习工作,接触了企业中的项目,在这段时间的实习过程中,终于知道了企业级项目的体量和业务难度跟之前的小项目是完全不同的.10多天的适应期也逐渐让我找到了 ...
- 使用EasyExcel导出带下拉框的Excel
1. 创建注解 import java.lang.annotation.*;/*** 标注导出的列为下拉框类型,并为下拉框设置内容*/ @Documented @Retention(Retention ...
- Excel表格下载模板(带下拉框选项)
下载excel模板需要带下拉框选项,现在纯JAVA代码来实现 1.模板标题实体类 import cn.afterturn.easypoi.excel.annotation.Excel; import ...
- Vue+SpringBoot 实现Excel表下拉框与模板文件下载
最近做的项目需要实现该功能,经过查找相关博客,故在此做整理. 一.前端 1.在A.service.js文件中 import axios from 'axios' // 业务服务上下文 const ba ...
- python爬取下拉列表数据_Python+selenium之获取文本值和下拉框选择数据
Python+selenium之获取文本值和下拉框选择数据 一.结合实例进行描述 1. 实例如下所示: #新增标签操作 def func_labels(self): self.driver.find_ ...
- 通过触发绑定切换下拉框的数据
通过触发绑定切换下拉框的数据 -------------------------------------- 开发工具与关键技术:Visual Studio 2015 C# 作者:林敏静 撰写时间:20 ...
- Easyexcel导出带下拉框选项excel模板
需求:导出的excel模板,表头字段动态生成.sheet页下拉框内容动态生成 解决思路:为了避免excel下拉框选项过多会导致内容不显示,将下拉框的内容都存储在另一个新建的固定的sheet页,再通过引 ...
最新文章
- mysql构架,索引,视图,查询语句
- asp.net开发中自定义网站的目录
- 环境变量太大解决方法
- Linux2.6内核 -- 编码风格(3)
- python综合练习1-- 用户登录
- N的阶乘的长度 V2(斯特林近似) 51Nod - 1130
- JS的DOM和BOM
- ZooKeeper的原理(转)
- (二)ElasticSearch6.1.1 Python API
- GridView 中 Bind和Eval的区别详解
- ActiveMQ消息回流
- 一款可以安利的MarkDown编辑器
- 推荐一款接口自动化测试数据提取神器 JSonPath
- functions.php隐藏恶意代码,警惕WordPress主题functions.php包含的恶意代码
- 软件测试中什么是正交分析法,软件测试用例设计方法之正交分析法
- iShot--Mac最强截图工具
- 计算机文件删除怎么恢复,电脑删除文件怎么恢复
- WP7 个人股票软件 GilStock v1.0 正式版
- Flutter-如何计算文字宽高
- VBA 为什么你redim() 动态二维数组总出错?因为 redim 动态数组不太适合和循环搭配