前端--进行导入--xlsx和xls文件

2023-12-04

目的:前端导入表格

使用xlsx的包 版本是 0.16.8 最新的目前是18 不兼容 有问题

import * as XLSX from 'xlsx';
// import XLSX from 'xlsx' 没有这样写 是因为报错了 有知道为什么的可以评论一下 共享
function getHeaderRow(sheet) {
  const headers = []
  const range = XLSX.utils.decode_range(sheet['!ref'])
  let C
  const R = range.s.r
  /* start in the first row */
  for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */
    const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]
    /* find the cell in the first row */
    let hdr = 'UNKNOWN ' + C // <-- replace with your desired default
    if (cell && cell.t) hdr = XLSX.utils.format_cell(cell)
    headers.push(hdr)
  }
  return headers
}
// 读取Excel文件数据
export function readExcelFile(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = (e) => {
      const data = e.target.result
      const workbook = XLSX.read(data, { type: 'array' })
      const firstSheetName = workbook.SheetNames[0]
      const worksheet = workbook.Sheets[firstSheetName]
      const header = getHeaderRow(worksheet)
      const results = XLSX.utils.sheet_to_json(worksheet)
      resolve({ header, results })
    };
    reader.onerror = (e) => {
      reject(e);
    };
    reader.readAsArrayBuffer(file);
  });
}
// 会返回表头数组 和 结果数组   fileValue = e.target.files[0] 我用的<input type="file" 原生
const { header = [], results = [] } = await readExcelFile(fileValue)
// results返回的键是中文的 需要转成英文 变成表格需要的数据 
  const chineseMap = {
          '入职日期': 'timeOfEntry',
          '手机号': 'mobile',
          '姓名': 'username',
          '转正日期': 'correctionTime',
          '工号': 'workNumber'
        }
   const importData = results.map(item => {
              const itemObj = {}
              Object.keys(item).forEach(key => {
                itemObj[chineseMap[key]] = String(item[key]).trim()
              })
              return itemObj
            })
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端--进行导入--xlsx和xls文件 的相关文章

随机推荐