Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

是否能把自动合并单元格的功能加入? #70

Open
zhaohuiyingxue opened this issue Dec 9, 2020 · 0 comments
Open

是否能把自动合并单元格的功能加入? #70

zhaohuiyingxue opened this issue Dec 9, 2020 · 0 comments

Comments

@zhaohuiyingxue
Copy link

zhaohuiyingxue commented Dec 9, 2020

导出的时候,希望一列数据,相同的自动进行合并,为此写了一点js,希望能加入到组件中。

      const autoMergeCellArr={}
      /* @param  {Object} o 当前数据行对象
      * @param  {String|null} parent 合并参照属性,无参照可以填null或空字符串
      * @param  {String} name 合并列属性
      * @param  {Uint} col 当前列号,在模板中固定为_col
      * @param  {Uint} row 当前行号,在模板中固定为_row
      * @param  {Array} f 单元格合并范围数组,在模板中固定为_mergeCellArr_
      * @return {undefined} 没有返回值
      */
      const autoMergeCell = (o,parent,name,col,row,f)=>{
          //模板里调用需要添加以下语句,其中后三个参数不变
          //《%autoMergeCell(r,null,"XZ",_col,_row,_mergeCellArr_)%》
          const key = parent+"_"+name
          const now = {col_s : col,col_e :col, row_s :row ,row_e :row,p : o[parent],v:o[name]}
          const last = autoMergeCellArr[key]
          if(last === undefined || now.p!==last.p || now.v!==last.v){
            autoMergeCellArr[key]=now;
            return;
          }
          last.col_e = col
          last.row_e = row
          last.p=now.p
          last.v=now.v
          if(last.col_s!==last.col_e || last.row_s!==last.row_e){
            //需要合并
            let s = last.col_s+last.row_s+":"+last.col_e+last.row_e
            let i = f.findIndex(v=>v.startsWith(last.col_s+last.row_s+":"))
            if(i>-1)f[i] = s
            else f.push(s)
          }
        }

实现效果如下:
image

模板内占位符内容如下

序号	:<%forRow r,i in  _data_.data%><%~i+1%>
施工性质:<%=r.XZ%><%autoMergeCell(r,null,"XZ", _col, _row, _mergeCellArr_)%>
施工级别:<%=r.DJ%><%autoMergeCell(r,"XZ","DJ", _col, _row, _mergeCellArr_)%>

如果能加入到新版本中的话,autoMergeCell的最后三个参数其实应该是可以不用的了

PS:我在VUE中使用的代码如下

      //生成Excel文件
      const that = this
      const ejsexcel = require("ejsexcel");
      (async function() {
        //不写这一行导出会出错
        if(window.setImmediate === undefined)window.setImmediate = f=>setTimeout(f,0)
        const exlBuf = await JSZipUtils.getBinaryContent('Template/' + that.xlsxName + '.xlsx')
        const exlBuf2 = await ejsexcel.renderExcel(Buffer.from(exlBuf), xlsData);
        saveAs(new Blob([exlBuf2]) , that.xlsxName + '.xlsx')
      })();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant