xlsx

109 阅读1分钟
// 上传文件
const handleUpload = async (e) => {
    const file = e.target.files[0]
    if(!file) return
    const data = await getJson(file)
    jsonData = data
  }
  // 处理文件获得数据
  const getJson = (file) => {
     return new Promise((resolve, )=>{
      // 创建一个文件解析器
      const reader = new FileReader()
      // 传入file
      reader.readAsArrayBuffer(file)
        reader.onload = e => {
          const data = e.target.result
          // 解析成数组格式
          const workbook = XLSX.read(data, {type : 'array'})
          const sheet1 = workbook.Sheets['Sheet1']
          const json1 = XLSX.utils.sheet_to_json(sheet1)
          resolve(json1)
        }
     })
  }
  
  // 导出数组数据
  const exportExcel = (arr,sheetName,fileName) => {
    // 创建json
    const jsonWorkSheet = XLSX.utils.json_to_sheet(arr)
    // 创建sheet
    const workbook = {
      SheetNames : [sheetName],
      Sheets : {
        [sheetName] : jsonWorkSheet
      }
    }
    return XLSX.writeFile(workbook,fileName+'.xlsx')
  }
  
  // 导出sheets对象
  const exportExcelBySheets = (sheets, fileName = 'example.xlsx') => {
  // sheetName数组
  const SheetNames = [];
 // 对象数据 : sheetName : array
  const Sheets = {};
  const workbook = { SheetNames, Sheets };
  // 赋值
  sheets.forEach((sheet, i) => {
    const name = `sheet${i + 1}`;
    SheetNames.push(name);
    Sheets[name] = sheet;
  });

  return XLSX.writeFile(workbook, fileName, { type: 'binary' });
};

修改表头

// 传入的分别是数据,顺序,已经表头映射对象
// ws == jsonWorkSheet
const changeTabelHeader = (data,fields,titles) => {
    const ws = XLSX.utils.json_to_sheet(
        data,
        {
          header : fields
        }
      )
      const range = XLSX.utils.decode_range(ws['!ref'])
      for(let c = range.s.c;c <= range.e.c;c++){
        const header = XLSX.utils.encode_col(c) + '1'
        ws[header].v = titles[ws[header].v]
      }
      return ws

}