XLSX怎么设置单元格类型呢

发布于 2022-09-12 23:01:56 字数 2074 浏览 35 评论 0

以下是目前写好的方法,比方说我想设置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;
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

新一帅帅 2022-09-19 23:01:56

老哥,你找到解决办法了吗

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文