1.生成一个特定的表头excel文件并下载
const download = () => {
//1、创建空工作簿
const workbook = XLSX.utils.book_new();
//2、将一组 JS 对象转换为工作表
const ws = XLSX.utils.json_to_sheet(
[
{
A: 'AAA',
B: 'BBB',
C: 'CCC',
D: 'DDD',
}
],
{
skipHeader: true //如果为 true,则不在输出中包含标题行
}
);
//3、将工作表附加到工作薄
XLSX.utils.book_append_sheet(workbook, ws, 'Sheet1');
//4、尝试写入wb到filename。在基于浏览器的环境中,它将尝试强制客户端下载。
XLSX.writeFile(workbook,`example.xlsx`,{ bookType: 'xlsx', type: 'array' });
};
2.添加一列数据并下载
我的需求是有几行表格数据就要添加对应的列数据,比如我上面的例子,下载下来的表格数据是:
AAA | BBB | CCC | DDD |
---|---|---|---|
然后我添加了两行数据:
AAA | BBB | CCC | DDD |
---|---|---|---|
1 | 2 | 3 | 4 |
1 | 2 | 3 | 4 |
我要再添加一列数据列名为EEE,两行对应的数据都是5,聪明的我会怎么做呢꒰⑅•ᴗ•⑅꒱,这里我的文件上传使用的是antd的上传组件,不卖关子了,直接放我的代码:
const download = ()=> {
const file = fileList[0]; // 这里的fileList是antd的上传文件组件(<Upload/>)的数据源
const reader = new FileReader(); // 创建一个FileReader实例
reader.readAsArrayBuffer(file); // 将文件读取为ArrayBuffer对象
reader.onload = (e: any) => { // 当读取操作成功完成时调用
const data = e.target.result;
const workbook = XLSX.read(data); // 用CSV数据读取字符串。它将生成具有工作表名称为Sheet1的单页工作簿
const ws = workbook.Sheets[workbook.SheetNames[0]]; // 定义一个worksheet
const length = XLSX.utils.sheet_to_json(ws).length; // sheet_to_json将工作簿转成对象数组
if (length > 0 && length <= 1000) {
const arr = [];
for (let i = 0; i < length; i++) {
arr.push({ EEE: 5 });
}
XLSX.utils.sheet_add_json(ws, arr, { origin: 'G1' }); // 将对象数组添加到现有的工作表中,从origin开始
XLSX.writeFile(workbook, 'example.xlsx'); // 下载文件
} else if (length > 1000) {
message.warning('每次最多创建1000条');
} else {
message.warning('请填写文档内容后上传!');
}
}
那么下载下来的表格数据将会变成:
AAA | BBB | CCC | DDD | EEE |
---|---|---|---|---|
1 | 2 | 3 | 4 | 5 |
1 | 2 | 3 | 4 | 5 |
好了,感兴趣的同学可以去试试啦,不过像是这种下载模板的需求一般都是后端来做的,前端来做的话就是用XLSX,附上我参考的文档:
xlsx的官方文档
大佬的使用xlsx读取excel文件的详细步骤