XLSX怎么设置单元格类型呢

以下是目前写好的方法,比方说我想设置A1-A10的单元格类型都是文本该如何修改呢

export const DownloadExl = (json: any, type?: any) => {
  var data = json[0];
  json.unshift({});
  var keyMap: any = []; //获取keys
  for (var k in data) {
    keyMap.push(k);
    json[0][k] = k;
  }
  var tmpdata: any = []; //用来保存转换好的json
  json
    .map((v: any, i: any) =>
      keyMap.map((k: any, j: any) =>
        Object.assign(
          {},
          {
            v: v[k],
            position:
              (j > 25 ? getCharCol(j) : String.fromCharCode(65 + j)) + (i + 1)
          }
        )
      )
    )
    .reduce((prev: any, next: any) => prev.concat(next))
    .forEach(
      (v: any, i: any) => {
        (tmpdata[v.position] = {
          v: v.v
        })
      }

    );
  var outputPos = Object.keys(tmpdata); //设置区域,比如表格从A1到D10
  var tmpWB = {
    SheetNames: ['mySheet'], //保存的表标题
    Sheets: {
      mySheet: Object.assign(
        {},
        tmpdata, //内容
        {
          '!ref': outputPos[0] + ':' + outputPos[outputPos.length - 1] //设置填充区域
        }
      )
    }
  };

  var tmpDown = new Blob(
    [
      s2ab(
        XLSX.write(
          tmpWB,
          {
            bookType: type ? 'xlsx' : type,
            bookSST: false,
            type: 'binary'
          } //这里的数据是用来定义导出的格式类型
        )
      )
    ],
    {
      type: ''
    }
  ); //创建二进制对象写入转换好的字节流
  var href = URL.createObjectURL(tmpDown); //创建对象超链接
  setTimeout(() => {
    let newTmpDown = tmpDown.toString();
    URL.revokeObjectURL(newTmpDown); //用URL.revokeObjectURL()来释放这个object URL
  }, 100);
  return href;
};
const s2ab = (s: any) => {
  //字符串转字符流
  var buf = new ArrayBuffer(s.length);
  var view = new Uint8Array(buf);
  // @ts-ignore
  for (var i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
  return buf;
};
// 将指定的自然数转换为26进制表示。映射关系:[0-25] -> [A-Z]。
const getCharCol = (n: any) => {
  let s = '',
    m = 0;
  while (n > 0) {
    m = (n % 26) + 1;
    s = String.fromCharCode(m + 64) + s;
    n = (n - m) / 26;
  }
  return s;
};
阅读 3.5k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题