csv文件导入并解析文件,文件内容添加到表格中
import Papa from 'papaparse'; // 解析cvs插件
import jschardet from 'jschardet'; // 编码识别
name="file"
accept=".csv"
showUploadList={false}
beforeUpload={this.beforeUpload}
>
<Button>导入csv文件</Button>
</Upload>
beforeUpload = (file) => {
let res = [];
const fReader = new FileReader();
// readAsDataURL 读取本地文件 得到的是一个base64值
fReader.readAsDataURL(file);
// 读取文件成功
fReader.onload = function (evt) {
const data = evt.target?.result;
if (typeof data === 'string') {
const encoding = checkEncoding(data);
//papaparse.js 用来解析转换成二维数组
Papa.parse(file, {
encoding: encoding,
complete: function (results) {
// UTF8 \r\n与\n混用时有可能会出问题
res = results.data;
let list = [];
//去除最后的空行 有些解析数据尾部会多出空格
if (res?.[res.length - 1]?.[0] === '') {
res.pop();
}
res.forEach((item) => {
for (let i = 0; i < item.length; i++) {
let newItem = item[i].trim();
let index = list.indexOf(newItem);
if (newItem !== '' && index === -1) {
list.push(item[i].trim());
}
}
});
},
});
}
};
setTimeout(() => {
const { columns, dataSource } = this.state;
const maxKey =
deepClone(dataSource).sort((a, b) => b.key - a.key)?.[0]?.key ?? 1;
const csvArr = res.map((v, i) => {
let obj = {};
v.map((vs, is) => {
obj[columns?.[is + 1]?.['dataIndex']] = vs;
obj['key'] = maxKey + 1 + i;
});
return obj;
});
this.setState({
dataSource: [...dataSource, ...csvArr],
});
}, 500);
return false;
};