提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
最近有一个需求关于银行帐单excel导入解析,并生成相应的模板,以便后续直接输入
提示:以下是本篇文章正文内容,下面案例可供参考
一、准备工作?
使用vue,sheetJs,elmengt-ui组件库
二、使用步骤
1.引入库
代码如下(示例):
## 1.下载sheetjs
代码如下(示例):
npm install xlsx
或者
yarn add xlsx
下载后引入:
import * as XLSX from "xlsx";
## 2.上传文件

<el-upload
ref="upload"
:action="uploadUrl"
accept=".xlsx, .xls, .pdf"
:on-preview="handlePictureCardPreview"
:on-remove="handleRemove"
:before-upload="beforeUpload"
:on-change="handleChange"
:on-success="handleAvatarSuccess"
:headers="headers"
:limit="1"
directory
>
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
展示的table:

上传成功后将文件保存:
handleAvatarSuccess(res, file) {
this.file = file;
// 其他逻辑
},
getExcelDataYS() {
if (!this.file) {
this.$message.error("请先上传文件");
return;
}
// 然后利用sheetJS提供的api进行格式的提取和数据的提取,这里主要由于我们项目数据是后端返回的,就不用自己拼接了
const reader = new FileReader();
reader.onload = (e) => {
const data = new Uint8Array(e.target.result);
const workbook = XLSX.read(data, { type: "array" });
console.log(workbook,workbook.SheetNames[this.form.sheet], "workbook ");
const SheetNames = workbook.SheetNames[this.form.sheet];
// 检查是否有有效的 sheet
if (!this.form.sheet || !SheetNames) {
this.$message.error("请选择有效的 sheet 页");
return;
}
const worksheet = workbook.Sheets[SheetNames];
console.log(workbook, workbook.SheetNames, "worksheet");
const merges = worksheet["!merges"] || [];
const mergedCells = {};
merges.forEach((merge) => {
const { s: start, e: end } = merge;
const startCell = XLSX.utils.encode_cell(start);
const endCell = XLSX.utils.encode_cell(end);
mergedCells[startCell] = {
endCell,
rowspan: end.r - start.r + 1,
colspan: end.c - start.c + 1,
};
});
this.mergedCells = mergedCells; // 保存合并单元格信息
};
reader.readAsArrayBuffer(this.file.raw); // 使用 file.raw 获取 Blob 对象
// 获取excel数据
this.getpreviewExcelData();
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
const startCell = XLSX.utils.encode_cell({ r: rowIndex, c: columnIndex });
const mergeInfo = this.mergedCells[startCell];
console.log(mergeInfo, "mergeInfo");
if (mergeInfo) {
return {
rowspan: mergeInfo.rowspan,
colspan: mergeInfo.colspan,
};
} else {
return {
rowspan: 1,
colspan: 1,
};
}
},




# 总结
对于前端excel导入并展示,首先要明确导入的excel是否是固定样式或者像我这样按照原样展示的,根据导入的文件file,获取其内部的格式信息,主要是合并单元格的展示,sheetJs提供的解析数据里面都有,然后根据样式数据做出合并单元格的操作利用element-ui的table组件提供的span-method进行操作,最后渲染table
482

被折叠的 条评论
为什么被折叠?



