文件操作
导出一个 json
const data = JSON.stringify({
name: 'user export template',
scenarios: [],
version: '1.0'
})
function exportJSON(data: string) {
const blob = new Blob([data], {type: "octet/stream"});
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = 'scenes.json';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
xlsx 导入导出
import { read as XLSXRead, utils as XLSXUtils, writeFile } from "xlsx";
/**
* 生成 XLSX Buffer 对象
* @param data 需要导出的数据,数组对象格式
* @param fileName 导出的文件名,默认: 新建 XLSX 工作表
*/
function buildXLSXBuffer<T>(data: T[], type: 'xlsx' | 'csv' = 'xlsx', fileName = "新建 XLSX 工作表") {
const workbook = XLSXUtils.book_new(); // 创建一个 workbook 对象
const worksheet = XLSXUtils.json_to_sheet<T>(data); // 创建 worksheet 对象
XLSXUtils.book_append_sheet(workbook, worksheet, "Sheet1"); // 'Sheet1'是工作表的名称
writeFile(workbook, `${fileName}.${type}`, {
bookType: type,
});
// downloadExcelFile(excelBuffer, `${fileName}.xlsx`); // XLSX.write 可以生成 buffer
}
/**
* 下载生成的 buffer
* @param buffer XLSX 工具生成的 buffer 对象
* @param fileName 导出的文件名
*/
function downloadExcelFile(buffer: ArrayBuffer, fileName = "新建 XLSX 工作表.xlsx") {
const data = new Blob([buffer], { type: "application/octet-stream" });
const url = URL.createObjectURL(data);
const link = document.createElement("a");
link.href = url;
link.setAttribute("download", fileName);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
/**
* 解析上传的 excel 文件
*/
function parseExcel(raw: UploadRawFile) {
return new Promise((resolve, reject) => {
readFile2Binary(raw)
.then((res) => {
const workbook = XLSXRead(res, { type: "binary" }); // 读取二进制文件生成 workbook
const sheetName = workbook.SheetNames[0]; // 解析表格第一个 sheet
const excelData = XLSXUtils.sheet_to_json(workbook.Sheets[sheetName]);
resolve(excelData);
})
.catch(() => {
reject();
});
});
}
/**
* el-upload 上传的文件读取成二进制
* @param file
*/
function readFile2Binary(raw: UploadRawFile) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsBinaryString(raw); //以二进制的方式读取
reader.onload = (ev) => {
if (ev.target) {
resolve(ev.target.result);
} else {
reject();
}
};
});
}