vue3 导入excel数据

所需包

bash 复制代码
"xlsx": "^0.18.5"

页面导入包

bash 复制代码
import * as XLSX from 'xlsx';
import {genFileId,  UploadProps, UploadRawFile,ElTable } from 'element-plus';

页面

bash 复制代码
	<el-upload  accept=".xlsx" :on-change="changeExcel" :on-exceed="handleExceed" :limit="1" :auto-upload="false" :show-file-list="false"  ref="upload">
		<el-button type="primary" size="default">导入Excel</el-button>
	</el-upload>



//js
let tableData=ref([])
const upload = ref<InstanceType<typeof ElTable>>();
const handleExceed: UploadProps['onExceed'] = (files) => {
	upload.value!.clearFiles();
	const file = files[0] as UploadRawFile;
	file.uid = genFileId();
	upload.value!.handleStart(file);
};


function changeExcel(e, fileList) {
	console.log('changeExcelProject---------->');
	if (fileList.length > 1) {
		fileList.splice(0, 1);
	}
	const files = e.raw;
	console.log('files------>', files);
	// 读取表格
	const fileReader = new FileReader();
	fileReader.onload = (ev) => {
		const workbook = XLSX.read(ev.target.result, {
			type: 'binary',
		});

		const wsname = workbook.SheetNames[0];
		const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname], {
			defval: '',
		});
		console.log('ws=', ws); // 转换成json的数据
		//可以选择构建列
		let columnsproject = [];
		if (ws && ws.length > 0) {
			const obj = ws[0] as Object;
			for (const key in obj) {
				if (obj.hasOwnProperty(key)) {
					columnsproject.push({
						label: key,
						prop: key,
					});
				}
			}
		}

		tableDataproject.value = [...ws];
		fieldMap.set('姓名', 'name');
		fieldMap.set('年龄', 'age');
		fieldMap.set('性别', 'sex');
	

		let	tableDataArr = [...ws];
		let dataNew: any[] = [];
		for (let i = 0; i < tableDataArr.length; i++) {
			const item = tableDataArr[i];
			const obj: any = buildingObj(item);
			dataNew.push(obj);
		}
        tableData.value=dataNew
		console.error("tableData",tableData)
	};
	fileReader.readAsBinaryString(files);
}

function buildingObj(item: object) {
	const obj = {};
	for (const [key, value] of fieldMap) {
		obj[value] = item[key];
	}
	return obj;
}
相关推荐
草莓熊Lotso5 分钟前
C++ 方向 Web 自动化测试入门指南:从概念到 Selenium 实战
前端·c++·python·selenium
JS.Huang10 分钟前
【JavaScript】原生函数
开发语言·javascript·ecmascript
Olrookie17 分钟前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi
best_scenery32 分钟前
excel绘制折线图
excel·分布图
大气层煮月亮36 分钟前
Oracle EBS ERP开发——报表生成Excel标准模板设计
数据库·oracle·excel
533_1 小时前
[vue] dayjs 显示实时时间
前端·javascript·vue.js
故事与他6451 小时前
XSS_and_Mysql_file靶场攻略
前端·学习方法·xss
ftpeak2 小时前
JavaScript性能优化实战
开发语言·javascript·性能优化
莫的感情2 小时前
下载按钮点击一次却下载两个文件问题
前端
一个很帅的帅哥2 小时前
JavaScript事件循环
开发语言·前端·javascript