
vue xlsx表单导出样式设置
发布日期:2021-05-14 20:24:08
浏览次数:26
分类:精选文章
本文共 2876 字,大约阅读时间需要 9 分钟。
xlsx 开发手册
安装问题
在开发过程中,可能会遇到以下错误:
./cptable in ./node_modules/_xlsx-style@0.8.13@xlsx-style/dist/cpexcel.js
这个错误提示我们在安装过程中可能出现了问题。解决方法如下:
在 node_modules/xlsx-style/dist/cpexcel.js
文件的第 807 行,将以下内容修改为:
var cpt = cptable;
这样就解决了安装问题。
制作导出方法
接下来,我们需要制作一个导出函数。以下是完整的代码示例:
export function fileExport3(selectData, dataListCall, fileName) { if (selectData && selectData.length > 0) { selectData = nullClear(selectData); // 清除数据中的 null selectData = JSON.parse(JSON.stringify(selectData)); // 深拷贝数据 dataListCall = JSON.parse(JSON.stringify(dataListCall)); // 深拷贝数据 let data = formatExcelData(selectData, dataListCall); // 格式化选中数据,将字典数据解析成汉字 let sheet = XLSX.utils.aoa_to_sheet(data); // 将二维数组转成 sheet 数据 let flName = JSON.parse(JSON.stringify(fileNameFun(fileName))); // 格式化文件名称 sheet = excelStyle(sheet); // 定义表格样式 if (!timer) { timer = setTimeout(() => { Elements.Message.success(Zh.exportSuccess); openDownloadDialog(sheet2blob(sheet), flName); // 导出文件 timer = null; }, 500); } else { Elements.Message.warning(Zh.exportData); } }}
制作下载方法
我们还需要一个下载对话框函数。以下是完整的代码示例:
/** * 下载对话框 * @param url 下载地址,也可以是一个 blob 对象,必选 * @param saveName 文件名,可选 */function openDownloadDialog(url, saveName) { if (typeof url === 'object' && url instanceof Blob) { url = URL.createObjectURL(url); // 创建 blob 地址 } var aLink = document.createElement('a'); aLink.href = url; aLink.download = saveName || ''; // HTML5 新增属性,指定保存文件名 var event; if (window.MouseEvent) { event = new MouseEvent('click'); } else { event = document.createEvent('MouseEvents'); event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); } aLink.dispatchEvent(event);}
sheet 数据转 excel 文件流的方法
最后,我们需要一个将 sheet 数据转换为 excel 文件流的方法。以下是完整的代码示例:
/** * sheet 数据转 excel 文件的数据,然后利用 URL.createObjectURL 下载 * @param sheet sheet 数据 * @param sheetName 文件名称 */function sheet2blob(sheet, sheetName) { sheetName = sheetName || '导出文件'; // 文件名不存在,默认为 '导出文件' var workbook = { SheetNames: [sheetName], Sheets: {} }; console.log(workbook, 'workbook'); workbook.Sheets[sheetName] = sheet; var wopts = { bookType: 'xlsx', bookSST: false, type: 'binary' }; var wbout = write(workbook, wopts); var blob = new Blob([s2ab(wbout)], { type: "application/octet-stream" }); function s2ab(s) { var buf = new ArrayBuffer(s.length); var view = new Uint8Array(buf); for (var i = 0; i != s.length; ++i) { view[i] = s.charCodeAt(i) & 0xFF; } return buf; } return blob;}
效果图
通过以上方法,我们可以轻松实现数据的导出和下载功能。整个流程清晰且高效,能够满足日常开发需求。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月24日 17时44分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
注册页面案例
2019-03-11
np.bincount(x)的简单解释
2019-03-11
LeetCode Top-100 T22-括号生成
2019-03-11
vscode设置eslint保存文件时自动修复eslint错误
2019-03-11
JAVA 多线程
2019-03-11
牛客-链表中环的入口节点(Java)
2019-03-11
堆的应用_topK算法和堆排序
2019-03-11
最大半连通子图
2019-03-11
Remove Extra one 维护前缀最大最小值
2019-03-11
另类加法,走方格的方案数,最近公共祖先
2019-03-11
[Java Path Finder][JPF学习笔记][7]JPF输出详细程度设置
2019-03-11
GitHub完整记录数据库GHTorrent的下载和安装经验
2019-03-11
设计模式—— 三:依赖倒置原则
2019-03-11
因SGA分配错误无法启动数据库
2019-03-11
ORA-00020 超过当前最大连接数
2019-03-11
喝红茶是否会上火
2019-03-11
Android进阶解密读书笔记2——第2章:Android系统启动——第1、2小节
2019-03-11
主线程中Looper的轮询死循环为何没有阻塞主线程?
2019-03-11
Gradle实战四:Jenkins持续集成
2019-03-11