XLSX库导入(将excel转为json)和导出

复制代码
import * as  XLSX from 'xlsx';
export function getXlsxData(file: any) {
  return new Promise((resolve, reject) => {
    const fileReader = new FileReader();
    fileReader.onload = event => {
      try {
        let data:any = []; // 存储获取到的数据
        const  result  = event.target?.result;
        // 以二进制流方式读取得到整份excel表格对象
        const workbook = XLSX.read(result, { type: 'binary' });
        // 遍历每张工作表进行读取(这里默认只读取第一张表)
        for (const sheet in workbook.Sheets) {
          if (workbook.Sheets.hasOwnProperty(sheet)) {
            // 利用 sheet_to_json 方法将 excel 转成 json 数据
            let sheetJson = XLSX.utils.sheet_to_json(workbook.Sheets[sheet], { defval: '' })
            // console.log("sheetJson>>", sheetJson)
            data = data.concat(sheetJson);
            // break; // 如果只取第一张表,就取消注释这行
          }
        }
        resolve(data);
      } catch (e) {
        // 这里可以抛出文件类型错误不正确的相关提示
        console.log('文件类型不正确');
        reject(e);
      }
    };
    // 以二进制方式打开文件
    fileReader.readAsBinaryString(file);
  })
}


export function downloadXlsx(columns: Array<string>, data: Array<any>, fileName: string) {
  //columns 表头 data文件数据列表 fileName文件名称
  let table = [];
  let obj = {};
  columns.forEach((el, index) => {
    let str = String.fromCharCode(index + 65);
    obj[str] = el
  })
  table.push(obj)
  data.forEach((arr) => {
    let row = {}
    arr.forEach((el: any, index: number) => {
      let str = String.fromCharCode(index + 65);
      row[str] = el
    })
    table.push(row);
  });

  //创建book
  let wb = XLSX.utils.book_new();
  //json转sheet
  let ws = XLSX.utils.json_to_sheet(table, { header: Object.keys(obj), skipHeader: true });

  //设置列宽
  ws['!cols'] = (new Array(Object.keys(obj).length)).fill({ width: 15 });

  //sheet写入book
  XLSX.utils.book_append_sheet(wb, ws, "file");
  //输出
  let name = fileName || "文件下载"
  XLSX.writeFile(wb, name + ".xlsx");
}

export function formatJson(filterVal: Array<string>, jsonData: Array<any>,) {
  return jsonData.map((v) =>
    v && Object.keys(v).length ? filterVal.map((j) => v[j] || '') : []
  );
}
复制代码

 

posted @   吴小明-  阅读(892)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
历史上的今天:
2019-12-14 各种生成器
点击右上角即可分享
微信分享提示