问答

XLSX怎么设置单元格类型呢

作者:admin 2021-04-17 我要评论

以下是目前写好的方法,比方说我想设置A1-A10的单元格类型都是文本该如何修改呢 export const DownloadExl = (json: any, type?: any) = { var data = json[0]; ...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

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

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器