个人博客(纯手戳 vue3 + nodejs + mysql )http://snows-l.site
http://snows-l.site
一、导入
0、关键代码
// 安装插件
npm i xlsx/yarn add xlsx
// 导入xlsx
import * as XLSX from 'xlsx';
点击提交的时候才整理数据。上传的时候文件保存在 state.form.file[0] 中的
// 定义字段映射关系
const fieldMap = {
sheet2json: {
技能名称: 'skill_name',
技能等级: 'skill_level',
技能描述: 'skill_desc',
技能类型: 'skill_type',
技能效果: 'skill_effect',
技能消耗: 'skill_cost',
技能持续时间: 'skill_duration',
技能范围: 'skill_range',
技能范围: 'skill_range',
技能目标: 'skill_target'
}
};
// 提交 --- 点击提交的时候才整理数据。上传的时候文件保存的 state.form.file[0] 中的
const handleSummit = () => {
formRef.value.validate().then(async () => {
try {
const data = await state.form.file[0].arrayBuffer(); // 使用 arrayBuffer 避免中文乱码
const workbook = XLSX.read(data, { type: 'buffer' });
const outdata = XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[0]]);
// 映射字段名并过滤掉不符合预期的数据
const mappedData = outdata
.map(row => {
return Object.keys(row).reduce((targetMap, key) => {
const mappedKey = fieldMap.sheet2json[key];
if (mappedKey) {
targetMap[mappedKey] = row[key];
}
return targetMap;
}, {});
})
.filter(item => Object.keys(item).length > 0); // 过滤空对象
console.log('------- 导入的数据 -------', mappedData);
emits('submit', mappedData);
handleClose();
} catch (error) {}
});
};
1、template
<a-form :model="state.form" name="form" ref="formRef" :label-col="{ style: { width: '120px' } }" autocomplete="off" :rules="rules">
<a-form-item label="导入文件上传" name="file" :rules="rules.file">
<div class="file-warp" style="position: relative">
<a-upload
style="margin-left: 20px"
:file-list="state.form.file"
name="file"
:customRequest="upload"
:beforeUpload="beforeUpload"
@remove="handleRemove"
accept=".xlsx, .xls">
<a-button type="primary">
<upload-outlined></upl

最低0.47元/天 解锁文章
717

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



