前端解析xlsx
需要 js-xlsx
/***关键代码 react**/
import * as XLSX from 'xlsx';
/**读取被选中的 xlsx
*/
let onChoiceFile = (file, row) => {
let data = []; //保存转换后的数据
// 通过FileReader对象读取文件
const fileReader = new FileReader();
fileReader.readAsBinaryString(file); //转换二进制
fileReader.onload = event => { //添加加载完成事件
try {
const { result } = event.target;
// 转为表格对象
const workbook = XLSX.read(result, { type: 'binary' });
// 遍历sheet
for (const sheet in workbook.Sheets) {
if (workbook.Sheets.hasOwnProperty(sheet)) {
// sheet 转成 array ,{ header: 1 }为每一行数据就是一个string数组 去掉则会返回把第一行对应位置为KEY 当前行为VALUE 的JSON数组 ,配置其它表头可以点进去看具体配置
data = data.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet], { header: 1 }));
break; // 需要遍历所有sheet就把 break 注释掉
}
}
Modal.confirm({
title: '群发短信确认',
content: '确定要使用 ' + row.title + ' 短信模板群发吗',
okText: '确认',
cancelText: '取消',
onOk: () => {
dispatch({
type: 'smsManagementData/sendmsg',
payload: {
tempId: row.id,
data: JSON.stringify(data),
projectId: getProjectId()
},
callback: (res) => {
if (res.status) {
message.success('群发信息提交成功');
} else {
message.error('群发信息提交失败');
}
},
});
},
})
console.log(data);
} catch (e) {
// 这里可以抛出文件类型错误不正确的相关提示
console.log(e);
message.error('文件类型不正确');
return;
}
};
return false
}
/*** antd 的 upload**/
return <Upload
accept="file"
beforeUpload={(file) => { onChoiceFile(file, row) }}
showUploadList={false}//不显示进度条
>
<Button
style={{ margin: "5px" }}
icon={<MessageOutlined />}
shape="circle"
type="primary"
/>
</Upload>
后端解析xlsx
需要 node-xlsx
/***关键代码 nodeJS koa2 **/
const xlsx = require('node-xlsx');
let cacheExcl = async (ctx, next) => {
let url = ctx.url;
let request = ctx.request;
let req_query = request.query;
let req_queryString = request.queryString;
let req_body = request.body;
let xlsxData = [];
await new Promise((resolve, reject) => {
//解析xlsx
xlsxData = xlsx.parse(request.files.file.path);//xlsx.parse 传参为 文件流或者地址 获得的结果为 [string[],string[],string[]] string[]为一行数据
resolve(xlsxData);
})
try {
for (let i = 0; i < xlsxData[0].data.length; i++) {
if (i != 0) {
await sqlModel.addPartner(xlsxData[0].data[i])
}
}
ctx.body = {
code: 0,
data: req_body,
status: true,
success: true
}
} catch (e) {
ctx.body = {
code: -1,
err: JSON.stringify(e),
status: false,
success: false
}
}
}