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;
}
相关推荐
华子w9089258595 分钟前
基于 SpringBoot+VueJS 的农产品研究报告管理系统设计与实现
vue.js·spring boot·后端
天天扭码25 分钟前
《很全面的前端面试题》——HTML篇
前端·面试·html
xw527 分钟前
我犯了错,我于是为我的uni-app项目引入环境标志
前端·uni-app
!win !30 分钟前
被老板怼后,我为uni-app项目引入环境标志
前端·小程序·uni-app
Burt31 分钟前
tsdown vs tsup, 豆包回答一坨屎,还是google AI厉害
前端
群联云防护小杜1 小时前
构建分布式高防架构实现业务零中断
前端·网络·分布式·tcp/ip·安全·游戏·架构
ohMyGod_1232 小时前
React16,17,18,19新特性更新对比
前端·javascript·react.js
前端小趴菜052 小时前
React-forwardRef-useImperativeHandle
前端·vue.js·react.js
@大迁世界2 小时前
第1章 React组件开发基础
前端·javascript·react.js·前端框架·ecmascript
Hilaku3 小时前
从一个实战项目,看懂 `new DataTransfer()` 的三大妙用
前端·javascript·jquery