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;
}

效果图

通过以上方法,我们可以轻松实现数据的导出和下载功能。整个流程清晰且高效,能够满足日常开发需求。

上一篇:Vue 项目全局配置文件
下一篇:vue excel-style导出表格样式设置

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月24日 17时44分25秒