- 安装
XLSX
插件:npm run install --save xlsx
- 在使用的组件中导入
xlsx
,import XLSX from "xlsx";
- 实现导入
uploadExcel = (file: any, fileList: any[]): boolean => {
let reader = new FileReader();
reader.onload = (e: any) => {
let result = e.target.result;
let wb = XLSX.read(result, {
type: "binary",
});
let data: any = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
let keys = Object.keys(data[0]);
let columns = keys.map((item, index) => {
return {
title: item,
dataIndex: item,
key: item + index,
};
});
data.forEach((item: any, index: number) => {
item.key = item + index;
});
this.setState({
tableData: data,
tableColumns: columns,
});
};
reader.readAsBinaryString(file);
return false;
};
- 实现导出
downloadExcel = () => {
let json: any[] = [
{ 姓名: "张三", 年龄: "20", 学号: "1" },
{ 姓名: "李四", 年龄: "23", 学号: "2" },
{ 姓名: "王五", 年龄: "13", 学号: "3" },
];
let tmpData = json[0];
json.unshift({});
let keyMap: any = [];
for (let k in tmpData) {
keyMap.push(k);
json[0][k] = k;
}
tmpData = [];
let arr: any = json.map((v: any, i: number) =>
keyMap.map((k: any, j: number) =>
Object.assign(
{},
{
v: v[k],
position:
(j > 25 ? this.getCharCol(j) : String.fromCharCode(j + 65)) +
(i + 1),
}
)
)
);
let arr1: any = [];
arr.forEach((item1: any) => {
item1.forEach((item2: any) => {
arr1.push(item2);
});
});
arr1.forEach((v: any, i: number) => {
tmpData[v.position] = {
v: v.v,
};
});
let outPutArea = Object.keys(tmpData);
let tmpWB = {
SheetNames: ["sheet1"],
Sheets: {
sheet1: Object.assign(
{},
tmpData,
{
"!ref": outPutArea[0] + ":" + outPutArea[outPutArea.length - 1],
}
),
},
};
console.log(tmpWB);
XLSX.writeFile(tmpWB, "模板.xlsx");
};