Talk is cheap. Show me your code

Excel 数据转二维数组 JSON

问题描述:

偶尔会遇到读取 Excel 数据的场景

在网页中,可以上传文件然后处理(可借助 js-xlsx 等插件),如果有 node 服务,也可以使用类似的操作

不过如果是在应用外,只是临时拿到一个 Excel,需要一些数据分析,可以用更轻量的办法,比如复制粘贴...

 

解决方案:

全选并复制粘贴 Excel 的内容,会得到一个字符串,其中用 '\t' 划分列,用  '\n' 换行

如果数据不复杂,可以直接通过 split 处理为二维数组:

function splitExcelToArray(str) {
    return str.split('\n').map((x) => x.split('\t'))
}

但如果单元格中有换行符 '\n', 这个函数就不适用

这时候可以手动在表格的首列前再加一列特殊字符,用于标记换行

// 手动在 Excel 插入特殊字符列
const MARK = '@@$$@@';

function splitExcelByMark(str, mark) {
    return str.split(mark).map((x) => x.split('\t').slice(1))
}

这时候拿到的是二维数组,还可以将表头作为数据的 key,将数据处理为一维对象数组

/** 将二维数组的表格转为一维对象数组 */
function formatArray(arr) {
  // 第一行为列表的表头, 用作对象key
  const head = arr[0];
  const res = [];
  for (let i = 1; i < arr.length; i++) {
    const item = arr[i];
    res.push(
      item.reduce((acc, v, idx) => {
        const key = head[idx];
        return {
          ...acc,
          [key]: v,
        };
      }, {})
    );
  }
  return res;
}

 


示例:

 

 

posted @ 2023-03-02 16:46  Wise.Wrong  阅读(425)  评论(0编辑  收藏  举报