文件操作

导出一个 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();
      }
    };
  });
}