精华内容
下载资源
问答
  • 广义表的表头和表尾是什么?

    万次阅读 多人点赞 2017-11-13 23:39:55
    广义表((a,b),c,d)表头和表尾分别是什么? 亲们,大部分同学碰到广义表就痛不欲生,其实我想说的是:世上那多一点多不懂广义表的人都活得那么开心,你还有啥过不过去的。 请看我的公式: (1)表头:当广义表LS...

    广义表((a,b),c,d)表头和表尾分别是什么?

     

    亲们,大部分同学碰到广义表就痛不欲生,其实我想说的是:世上那么多一点都不懂广义表的人都活得那么开心,你还有啥过不过去的。

    请看我的公式:

    (1)表头:当广义表LS非空时,称第一个元素为LS的表头;

    (2)表尾:称广义表LS中除去表头后其余元素组成的广义表为LS的表尾。

    有的同学上面的(1)(2)看的太快,没有发现表头和表尾的区别。

    重点说三遍:表头是元素,表尾是广义表。

    重点说三遍:表头是元素,表尾是广义表。

    重点说三遍:表头是元素,表尾是广义表。

     

    亲,我要举个栗子了。

    广义表(a, (b))的表头是单元素a,表尾是广义表((b))。【亲要在(b)的外面加一层小括号,才能变成广义表。因此是((b))  】

     

    亲,我要再举个栗子了。

    广义表(a)的表头是单元素a,表尾是广义表(),哇塞,为啥是(),不是空呢?明明a后面没有元素了。想想表尾一定是个广义表。潜台词就是一定带(),没有元素就有一个孤零零的()好了。

     

    亲,我要再举个栗子了。

    广义表(a, b, c)的表头是单元素a,表尾是广义表(b,c)。

    好了,到现在,其实你已经清楚了,广义表的表头是单元素,表尾是个广义表。

     

     总结总结总结: 根据广义表对表头和表尾的定义可知:

    (1)对任意一个非空的广义表,其表头可能是单元素,也可能是广义表,

    (2)而其表尾一定是广义表。

    (3)注意表尾的深度(即括号的嵌套层数)

    (4)表尾是由除了表头以外的其余元素组成的广义表,所以,需要在表尾的直接元素外面再加一层括号。

     

     

    来验证自己学习的怎么样了吧?

     求广义表的表头和表尾是广义表的基本操作,给定一个广义表,可以将某个单元素通过表头和表尾求出。

    已知广义表L=(a,(b,(c,(d)), e), f )

      ⑴ L1=Tail(L)=((b,(c,(d)), e), f )

      ⑵ L2=Head(L1)= (b,(c,(d)), e)

      ⑶ L3=Tail(L2)=((c,(d)), e)

      ⑷ L4=Head(L3)=(c,(d))

      ⑸ L5=Head(L4)= c

    如果以上5个都正确,那么恭喜你已经掌握了广义表的头和尾了。

    展开全文
  • QTableWidget QTableView 自定义复杂表头(多行表头表头合并) 、冻结、固定特定的行
  • asp.net 导入excel时,处理合并表头、复杂表头、多行表头 1.解决复杂表头的Excel导入。可以解决任何复杂的表头。 2.导入时,显示请稍后。。。提醒框,完毕后会自动隐藏 3.全面扫描Excel数据,将所有异常详细信息写入...
  • c#net 控件DataGridView 单元格合并 二维表头 复合表头
  • 2.TcTabelView支持设置多行横向表头(默认2行), 3.可以添加多张表格,每个表格是独立的,它们都有属于自己的自定义表头。 4.表头的右键操作我是自己写的,也可以用原例的方式,不过要复杂一点。 5.每一张表,一个tab,...
  • listview带表头(表头固定)
  • el-table修改表头 自定义表头报错 多选时删除表头 修改表头 参考element文档 自定义表头 会报错 error: ‘scope’ is defined but never used (vue/no-unused-vars) at xxxxxx <template slot="header" slot-...

    el-table修改表头 自定义表头报错 多选时删除表头 修改表头

    参考element文档 自定义表头 会报错

    error: ‘scope’ is defined but never used (vue/no-unused-vars) at xxxxxx

      <template slot="header" slot-scope="scope">
        <el-input
          v-model="search"
          size="mini"
          placeholder="输入关键字搜索"/>
      </template>
    

    在这里插入图片描述
    一模一样的代码也会报错,好像是啥啥啥版本不对
    解决方法:
    在报错的这行代码上加行注释,取消eslint规范检索,就可以运行了
    例:

     <!-- eslint-disable-next-line -->
     <template slot="header" slot-scope="slot">
            标题1
     </template>
    

    完工

    但是 如果你想用这种方法修改多选表格的列名 这样就啥也没用

    令多选表格 多选列列名为空

    在这里插入图片描述
    如果你是单纯的不要表头上这个框框 让这一列的列名显示为空
    那先给他设置一个className,然后令他display:none;就可以了
    刚好el-table有一个属性:
    header-cell-class-name 表头单元格的 className 的回调方法,也可以使用字符串为所有表头单元格设置一个固定的 className。
    例:

     <el-table
                    :data="researchCenterData"
                    :header-cell-class-name="cellClass"
                    border
                    style="width: 100%"
                >
    
      //给第一列的列名加个class,名叫noneSelectHeader
             cellClass(row) {
                if (row.columnIndex === 0) {
                    return 'noneSelectHeader'
                }
            },
    

    接着 令他隐藏

    // 打钩表头隐藏
    .el-table .noneSelectHeader .cell {
        .el-checkbox {
            display: none;
        }
    }
    

    完工

    令多选表格 多选栏 的列名改为自定义列名

    那就直接修改dom结构吧

     <el-table
                    ref="multipleTable"
                    :data="researchCenterData"
                    :header-cell-class-name="cellClass"
                    border
                    style="width: 100%"
                >
                    <el-table-column type="selection" width="147">
                    </el-table-column>
                    <el-table-column></el-table-column>
                    <el-table-column></el-table-column>
     </el-table>
    
    date(){
            return {
    researchCenterData: [
                    {
                        date: '2016-05-02',
                        name: '王小虎',
                        address: '上海市普陀区金沙江路 1518 弄'
                    },
                    {
                        date: '2016-05-04',
                        name: '王小虎',
                        address: '上海市普陀区金沙江路 1517 弄'
                    }
                  ]
                }
    
      created() {
      //选中表格的第2行第三行
            this.toggleSelection([
                this.researchCenterData[1],
                this.researchCenterData[2]
            ])
        },
    
    methods: {
            toggleSelection(rows) {
                this.$nextTick(function() {
                //选中的那几行打钩
                    if (rows) {
                        rows.forEach(row => {
                            this.$refs.multipleTable.toggleRowSelection(row)
                        })
                    } else {
                    //没有数据就不打钩
                        this.$refs.multipleTable.clearSelection()
                    }
                    this.addHeader()
                })
            },
              //给第一列的列名加个class,名叫noneSelectHeader
             cellClass(row) {
                if (row.columnIndex === 0) {
                    return 'noneSelectHeader'
                }
            },
            addHeader() {
                //找到第一列的<div class="cell"><div>这个节点令他变为<div class="cell">自定义列名<div>
                var headerDom = document.getElementsByClassName('noneSelectHeader')
                var needDom = headerDom[0].firstChild
                needDom.innerHTML = '自定义列名'
            }
        }
    

    结果:
    在这里插入图片描述
    完工

    展开全文
  • 顺序表头文件顺序表头文件顺序表头文件顺序表头文件
  • 许多统计报表中都会涉及到复合表头的实现,最近写了一个复合表头的实例,与大家分享。
  • 我项目用的vue-element-...可以参照我添加三级表头方式,进行,添加4,5,6等多级表头导出。 如下示例,先布局好,此处参照项目的示例即可, methods: { handleDownloadExcel() { // this.downloadLoading = ...

    我项目用的vue-element-admin的模板,里面有导出的示例。不过只有一级和二级,

    本项目只展现,导出三级表头示例,

    可以参照我添加三级表头方式,进行,添加4,5,6等多级表头导出。

    如下示例,先布局好,此处参照项目的示例即可,

     

    methods: {
        handleDownloadExcel() {
          // this.downloadLoading = true
          import("@/vendor/Export2Excel").then(excel => {
            const multiHeader = [
              [
                "序号",
                "旅行社",
                "国内(温台意外)",
                "",
                "",
                "",
                "",
                "",
                "",
                "境外(含港澳台)",
                "",
                "",
                "",
                "",
                "",
                ""
              ]
            ];
            const multiHeader2 = [
              [
                "",
                "",
                "门票消费金额",
                "A类(张)",
                "",
                "B类(张)",
                "",
                "C类(张)",
                "",
                "门票消费金额",
                "D类(张)",
                "",
                "E类(张)",
                "",
                "F类(张)",
                ""
              ]
            ];
            const tHeader = [
              "",
              "",
              "",
              "全票",
              "半价",
              "全票",
              "半价",
              "全票",
              "半价",
              "",
              "全票",
              "半价",
              "全票",
              "半价",
              "全票",
              "半价"
            ];
            const filterVal = this.headVal;
            let list = [];
            if (this.tableDataExcelType == 0) {
              list = this.tableDataExcel;
            } else {
              list = this.tableDataExcelAll;
            }
            const data = this.formatJson(filterVal, list);
    //进行所有表头的单元格合并,建议一行一行来,不然容易整乱
            const merges = [
              "A1:A3",
              "B1:B3",
              "C1:I1",
              "J1:P1",
              "C2:C3",
              "D2:E2",
              "F2:G2",
              "H2:I2",
              "J2:J3",
              "K2:L2",
              "M2:N2",
              "O2:P2"
            ];
            //  const merges = ['A1:A2', 'B1:B2', 'C1:I2','J1:P2']
    
            excel.export_json_to_excel({
              multiHeader,//这里是第一行的表头
              multiHeader2,//这里是第二行的表头
              header: tHeader,//这里应该是算第三行的表头
              data,
              merges,
              filename: this.filename
            });
            // this.downloadLoading = false
          });
        },
        formatJson(filterVal, jsonData) {
          return jsonData.map(v =>
            filterVal.map(j => {
              if (j === "timestamp") {
                return parseTime(v[j]);
              } else {
                return v[j];
              }
            })
          );
        },
    
    
    
    
        },

     

    Export2Excel.js,在此文件进行修改,

    export function export_json_to_excel({
      multiHeader = [],
      multiHeader2 = [],//第三个参数
      header,
      data,
      filename,
      merges = [],
      autoWidth = true,
      bookType = 'xlsx'
    } = {}) {
      /* original data */
      filename = filename || 'excel-list'
      data = [...data]
    //此处是第三行行表头
      data.unshift(header);
    //此处是第二行表头
      for (let i = multiHeader2.length - 1; i > -1; i--) {
        data.unshift(multiHeader2[i])
      }
    //此处是第一行行表头
      for (let i = multiHeader.length - 1; i > -1; i--) {
        data.unshift(multiHeader[i])
      }
    
    
    
    

    Export2Excel.js  (全部代码,此文件是我修改后的),如下:

    /* eslint-disable */
    import { saveAs } from 'file-saver'
    import XLSX from 'xlsx'
    
    function generateArray(table) {
      var out = [];
      var rows = table.querySelectorAll('tr');
      var ranges = [];
      for (var R = 0; R < rows.length; ++R) {
        var outRow = [];
        var row = rows[R];
        var columns = row.querySelectorAll('td');
        for (var C = 0; C < columns.length; ++C) {
          var cell = columns[C];
          var colspan = cell.getAttribute('colspan');
          var rowspan = cell.getAttribute('rowspan');
          var cellValue = cell.innerText;
          if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;
    
          //Skip ranges
          ranges.forEach(function (range) {
            if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
              for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
            }
          });
    
          //Handle Row Span
          if (rowspan || colspan) {
            rowspan = rowspan || 1;
            colspan = colspan || 1;
            ranges.push({
              s: {
                r: R,
                c: outRow.length
              },
              e: {
                r: R + rowspan - 1,
                c: outRow.length + colspan - 1
              }
            });
          };
    
          //Handle Value
          outRow.push(cellValue !== "" ? cellValue : null);
    
          //Handle Colspan
          if (colspan)
            for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
        }
        out.push(outRow);
      }
      return [out, ranges];
    };
    
    function datenum(v, date1904) {
      if (date1904) v += 1462;
      var epoch = Date.parse(v);
      return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
    }
    
    function sheet_from_array_of_arrays(data, opts) {
      var ws = {};
      var range = {
        s: {
          c: 10000000,
          r: 10000000
        },
        e: {
          c: 0,
          r: 0
        }
      };
      for (var R = 0; R != data.length; ++R) {
        for (var C = 0; C != data[R].length; ++C) {
          if (range.s.r > R) range.s.r = R;
          if (range.s.c > C) range.s.c = C;
          if (range.e.r < R) range.e.r = R;
          if (range.e.c < C) range.e.c = C;
          var cell = {
            v: data[R][C]
          };
          if (cell.v == null) continue;
          var cell_ref = XLSX.utils.encode_cell({
            c: C,
            r: R
          });
    
          if (typeof cell.v === 'number') cell.t = 'n';
          else if (typeof cell.v === 'boolean') cell.t = 'b';
          else if (cell.v instanceof Date) {
            cell.t = 'n';
            cell.z = XLSX.SSF._table[14];
            cell.v = datenum(cell.v);
          } else cell.t = 's';
    
          ws[cell_ref] = cell;
        }
      }
      if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
      return ws;
    }
    
    function Workbook() {
      if (!(this instanceof Workbook)) return new Workbook();
      this.SheetNames = [];
      this.Sheets = {};
    }
    
    function s2ab(s) {
      var buf = new ArrayBuffer(s.length);
      var view = new Uint8Array(buf);
      for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
      return buf;
    }
    
    export function export_table_to_excel(id) {
      var theTable = document.getElementById(id);
      var oo = generateArray(theTable);
      var ranges = oo[1];
    
      /* original data */
      var data = oo[0];
      var ws_name = "SheetJS";
    
      var wb = new Workbook(),
        ws = sheet_from_array_of_arrays(data);
    
      /* add ranges to worksheet */
      // ws['!cols'] = ['apple', 'banan'];
      ws['!merges'] = ranges;
    
      /* add worksheet to workbook */
      wb.SheetNames.push(ws_name);
      wb.Sheets[ws_name] = ws;
    
      var wbout = XLSX.write(wb, {
        bookType: 'xlsx',
        bookSST: false,
        type: 'binary'
      });
    
      saveAs(new Blob([s2ab(wbout)], {
        type: "application/octet-stream"
      }), "test.xlsx")
    }
    
    export function export_json_to_excel({
      multiHeader = [],
      multiHeader2 = [],
      header,
      data,
      filename,
      merges = [],
      autoWidth = true,
      bookType = 'xlsx'
    } = {}) {
      /* original data */
      filename = filename || 'excel-list'
      data = [...data]
      data.unshift(header);
      for (let i = multiHeader2.length - 1; i > -1; i--) {
        data.unshift(multiHeader2[i])
      }
      for (let i = multiHeader.length - 1; i > -1; i--) {
        data.unshift(multiHeader[i])
      }
    
      var ws_name = "SheetJS";
      var wb = new Workbook(),
        ws = sheet_from_array_of_arrays(data);
    
      if (merges.length > 0) {
        if (!ws['!merges']) ws['!merges'] = [];
        merges.forEach(item => {
          ws['!merges'].push(XLSX.utils.decode_range(item))
        })
      }
    
      if (autoWidth) {
        /*设置worksheet每列的最大宽度*/
        const colWidth = data.map(row => row.map(val => {
          /*先判断是否为null/undefined*/
          if (val == null) {
            return {
              'wch': 10
            };
          }
          /*再判断是否为中文*/
          else if (val.toString().charCodeAt(0) > 255) {
            return {
              'wch': val.toString().length * 2
            };
          } else {
            return {
              'wch': val.toString().length
            };
          }
        }))
        /*以第一行为初始值*/
        let result = colWidth[0];
        for (let i = 1; i < colWidth.length; i++) {
          for (let j = 0; j < colWidth[i].length; j++) {
            if (result[j]['wch'] < colWidth[i][j]['wch']) {
              result[j]['wch'] = colWidth[i][j]['wch'];
            }
          }
        }
        ws['!cols'] = result;
      }
    
      /* add worksheet to workbook */
      wb.SheetNames.push(ws_name);
      wb.Sheets[ws_name] = ws;
    
      var wbout = XLSX.write(wb, {
        bookType: bookType,
        bookSST: false,
        type: 'binary'
      });
      saveAs(new Blob([s2ab(wbout)], {
        type: "application/octet-stream"
      }), `${filename}.${bookType}`);
    }
    

     

    希望对大家有帮助,不懂的请留言或私信我。

    展开全文
  • 主要介绍了python读csv文件时指定行为表头或无表头的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • QTableWidget 多行表头

    2018-11-26 12:53:11
    QTableWidget 多行表头,拿去用就行了,本想免费,但最小是1分,希望有帮助,希望有帮助,希望有帮助
  • QT自定义多行表头

    2018-02-24 18:38:28
    QT QTableView 多行表头,自定义表头,继承 QTableView
  • layui 复杂表头多层表头的表格数据非后台导出excel

    千次阅读 热门讨论 2019-08-28 16:20:38
    用过layui table的都了解,layui的表格自带导出功能,只要在属性...`遗憾的`是该方法暂时并不支持对多层表头的导出。 而多层复杂表头在很多系统中都有体现,而若不想通过后台代码去做导出,只在前端页面上该如何做呢?

    用过layui table的都了解,layui的表格自带导出功能,只要在属性toolbar里配置即可。
    如果嫌toolbar里的导出按钮不够美观,layui也友好的提供了自行定义按钮后调用导出页面数据的方法,详见:官方文档
    遗憾的是:该方法暂时并不支持对多层表头的导出。
    而多层复杂表头在很多系统中都有体现,而若不想通过后台代码去做导出,只在前端页面上该如何做呢?



    1 史前

    1.1 直接使用(两种方式)

    1.下载插件:
    地址:github table2excel
    下载下来项目后,在项目的dist中就有该js,在自己表格html页面引用即可使用。

    链接:百度云下载js
    提取码:1f52

    /**
     * 使用方法该js的方法(两行代码)
     */
    let table2excel = new Table2Excel();
    // 传入你的tableId即可导出
    table2excel.export($('#tableId'), "your filename");
    
    1. 一个解析页面元素方法:复制走即可使用
    /**
     * 
     * @param id:表格的id
     * @param fileName:导出的excel的名字
     */
     function  exportForExcle(id,fileName){
            var table = $(document.getElementById(id)).clone();
            table.attr('id','datatab');
            table.appendTo('body');
            method5('datatab');
            datatab.remove();
            function method5(tableid) {
                var idTmr;
                var tableToExcel = (function() {
                    var uri = 'data:application/vnd.ms-excel;base64,',
                        template = '<html><head><meta charset="UTF-8"></head><body><table border="1px">{table}</table></body></html>',
                        base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) },
                        format = function(s, c) {return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }) }
                    return function(table, name) {
                        if (!table.nodeType) table = document.getElementById(table)
                        var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}
                        var aTag = document.createElement('a');
                        aTag.download = fileName;
                        aTag.href = uri + base64(format(template, ctx));
                        document.body.appendChild(aTag);
                        aTag.onclick = function () {
                            document.body.removeChild(aTag);
                        }
                        aTag.click();
                    }
                })()
                if(getExplorer()=='ie')
                {
                    var curTbl = document.getElementById(tableid);
                    var oXL = new ActiveXObject("Excel.Application");
                    var oWB = oXL.Workbooks.Add();
                    var xlsheet = oWB.Worksheets(1);
                    var sel = document.body.createTextRange();
                    sel.moveToElementText(curTbl);
                    sel.select();
                    sel.execCommand("Copy");
                    xlsheet.Paste();
                    oXL.Visible = true;
                    try {
                        var fname = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls");
                    } catch (e) {
                        print("Nested catch caught " + e);
                    } finally {
                        oWB.SaveAs(fname);
                        oWB.Close(savechanges = false);
                        oXL.Quit();
                        oXL = null;
                        idTmr = window.setInterval("Cleanup();", 1);
                    }
                }
                else
                {
                    tableToExcel(tableid)
                }
                function Cleanup() {
                    window.clearInterval(idTmr);
                    CollectGarbage();
                }
                function  getExplorer() {
                    var explorer = window.navigator.userAgent ;
                    //ie
                    if (explorer.indexOf("MSIE") >= 0) {
                        return 'ie';
                    }
                    //firefox
                    else if (explorer.indexOf("Firefox") >= 0) {
                        return 'Firefox';
                    }
                    //Chrome
                    else if(explorer.indexOf("Chrome") >= 0){
                        return 'Chrome';
                    }
                    //Opera
                    else if(explorer.indexOf("Opera") >= 0){
                        return 'Opera';
                    }
                    //Safari
                    else if(explorer.indexOf("Safari") >= 0){
                        return 'Safari';
                    }
                }
            }
        }
    

    1.2 上述插件使用场景解析

    可用的情况:表格的渲染方式为静态渲染,即在html的table标签中渲染好了表头与数据。
    不可用的情况:表格的渲染方式为动态渲染,即从后台查询数据来渲染表格,包括渲染动态的表头。
    不可用的情况原因:用layui.table动态渲染的表格,不会在页面的html table标签中添加doom元素。
    如下图的表格(表头和数据均为动态渲染),layui渲染数据后,并不会在table标签中append doom元素,而是会在table 标签的下面追加一个新的div,将tr th td 和数据全部存放在里面。
    这也就导致了上述的两种方法均无法下载excel,就是因为:该插件在页面上找不到插件所需的doom节点与数据。
    在这里插入图片描述
    在这里插入图片描述


    1.3 不可用场景处理

    在表格渲染完成后的done方法中,去遍历页面上layui生成的div,抓取里面的格式与数据,来手动append到table中,再控制该table隐藏,来为导出做准备。

    1. 分析doom元素:能清晰看到表头和body的doom结构,里面有你需要的所有信息,包括表头的各种合并操作。

    在这里插入图片描述

    1. 手动向table标签里append html。
    table.render({
    	...          
        done: function (res, curr, count) {
            let header_tr = $("#tableId").next().find(".layui-table-header").find("tr");
            let body_tr = $("#tableId").next().find(".layui-table-body").find("tr");
            let header_html = "";
            let body_html = "";
            // 获取表头html,包括单元格的合并
            $.each(header_tr,function (i,tr) {
                let header_th = $(tr).find("th");
                header_html += "<tr>";
                $.each(header_th,function (j,th) {
                    let rowspan_num = $(th).attr("rowspan");// 行合并数
                    let colspan_num = $(th).attr("colspan");// 列合并数
                    if (rowspan_num && !colspan_num){// 只有行合并时
                        header_html += '<th rowspan= "'+ rowspan_num +'">';
                    } else if (colspan_num && !rowspan_num){// 只有列合并时
                        header_html += '<th colspan= "'+ colspan_num +'">';
                    } else if (rowspan_num && colspan_num){// 行列合并均有时
                        header_html += '<th rowspan= "'+ rowspan_num +'" colspan="'+ colspan_num +'">';
                    } else {// 没有发生单元格合并
                        header_html += '<th>';
                    }
                    header_html += $(th).children().children().text() + '</th>';// 获取表头名称并拼接th标签
                })
                header_html += '</tr>';
            })
            // 获取表格body数据
            $.each(body_tr,function (i,tr) {
                let body_td = $(tr).find("td");
                body_html += '<tr>';
                $.each(body_td,function (j,td) {
                    body_html += '<td>' + $(td).children().text() + '</td>';
                })
                body_html += '</tr>';
            })
            $("#tableId tr").remove();// 清除之前的doom结构
            $("#tableId").append(header_html).append(body_html);
            $("#tableId").hide();
        }
    });
    

    如果把最后hide()方法去掉,可以看到表格doom元素已经添加到table标签中。

    在这里插入图片描述
    在这里插入图片描述


    1.4 处理后的使用

    做了上面的处理后,就可使用第一步的方法做导出了
    下面是导出方法和导出后的截图
    导出的时候需要做一点小小的处理:

    let table2excel = new Table2Excel();
     /**
     * 此处的show()是为了避免table2excel将hide属性带入excel中
     * 导致下载后的excel中所有数据被隐藏
     */
    $('#tableId').show();
    table2excel.export($('#tableId'), "your filename");
    $('#tableId').hide();
    

    在这里插入图片描述
    说明:
    1、上面在导出的时候如果不先把表格show显示出来。wps的excel会正常显示,而office的excel则会把所有数据隐藏。这也是这个插件强大的地方,属性也会copy到excel中去。
    2、可能有的同学会觉得在这里显示出来自己添加的表格doom元素,会在页面上有一闪而过的视觉效果,亲测过,并没有。可能在网速超级卡顿的时候会出现。
    3、当然,这并不是最佳的解决方法。欢迎讨论。

    ----------------------------------------------我是分割线------------------------------------------------

    更新时间:2019年10月17日 10点00分
    感谢:@weixin_40915415 同学提出的固定列的特殊情况

    1.5 新的情况兼容:固定列

    layui在处理固定列时候的doom渲染跟活动列是不同的

    如下所示:我们将第一列承揽组固定,再用之前版本的js去append html时会发现,固定列的header和body发生了重复(两次)

    在这里插入图片描述
    分析doom元素:
    在这里插入图片描述
    我们看到这里出现了两个header
    原来layui在渲染有固定列的表头时,会把固定列的header和body再多渲染一次,放到样式为layui-table-fixeddiv里。
    知道这种结构,我们就好做新的处理了。
    新的获取header和body doom元素的js更改如下以兼容有固定列的layui table:

    let header_tr = $($("#tableId").next().find(".layui-table-header")[0]).find("tr");
    let body_tr = $($("#tableId").next().find(".layui-table-body")[0]).find("tr");
    

    ----------------------------------------------我是分割线------------------------------------------------

    2 蜕变

    2.1 table2excel_ext.js的诞生

    更新时间:2020年07月28日
    💕能耐心看到这儿的同学真的是爱学习的好同学,不过这儿我也给你准备了惊喜(本来觉得上面的那些是不是可以删掉了,后来一想也是自己当初的一个思路历程,就先留着吧)💕
    笔者将上诉的相关操作抽出了两个方法appendexportLayTable添加到了table2excel.js中,直接将该修改后的js引入到需导出excel数据的页面使用即可。

    链接:百度云下载 table2excel_ext.js
    提取码:4lsc

    使用方法:

    var table2Excel ;
    table.render({
    	elem: '#tableId',
    	...          
    	done: function (res, curr, count) {
    		table2Excel = new Table2Excel();
    		table2Excel.append($("#tableId"));
    	})    
    });
    // 导出excel点击事件
    $('#exportElemId').click(function(){
    	let fileName = 'XXX-20200728';
    	table2Excel.exportLayTable($('#tableId'),fileName);
    });
    

    ----------------------------------------------我是分割线------------------------------------------------

    2.2 新的情况兼容:合计行

    更新时间:2020年10月16日
    感谢:@zhang_pengpeng 同学提出的合计行的情况

    layui table 自动在前端计算添加的合计行(关于怎么开启合计行,请自行查看layui 官网文档)会在body的下面重新渲染一段新的dom结构。如下图所示:

    在这里插入图片描述

    在这里插入图片描述
    针对此种情况,笔者已经将table2excel_ext.js做了新的兼容,请返回目录2.1进行下载使用即可。
    ----------------------------------------------我是分割线------------------------------------------------

    2.3 新的情况兼容:排除列

    更新时间:2020年11月25日
    感谢:@qq_26097713 同学提出的排除列(列表中一些不想被导出的列)的情况。

    对于表格中的操作列,或者一些隐藏的列,又或者是一些不想导出的列。笔者对table2excel_ext.js做了新的兼容,来处理这种情况,下面将给出示例代码。
    ps:引入新的js不会对以前的调用产生任何影响。

    var table2Excel ;
    table.render({
    	elem: '#tableId',
    	...          
    	done: function (res, curr, count) {
    		// 排除掉的列的field数组(此参数可以不传,默认导出所有列)
    		let exceptColumns = ["field1","field2"];
    		table2Excel = new Table2Excel();
    		table2Excel.append($("#tableId"), exceptColumns);
    	})    
    });
    

    说明:

    1. table2Excel.append(table,exceptColumns)方法中的第二个参数exceptColumns可以不传,不传表示导出所有列。
    2. 其中exceptColumns数组中的值对应为渲染表格列时的field的值(表格中的操作列也请添加上一个field值,用于定位),如下:
    ...
    {
        title : "姓名",
        field : "username",// 此处的field
        width : "10",
        align : "center"
    }
    ...
    
    1. js下载链接已做更新,请返回目录2.1进行下载。
    展开全文
  • Element ui怎么自定义表头修改表头样式 在用element的table 表格的时候经常会遇到表头的样式很多,比如 点击表头就会出现提示文字 代码如下: <el-table> <el-table-column label="我的世界" :render-...
  • mybatis 表头

    2019-09-17 17:29:25
    一次网络原因无法进入mybatis的官网,这里来记录一下 mybatis表头 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD C...
  • QTableView表头填满控件,表头对齐

    千次阅读 2019-12-04 09:43:49
    关于QTableView表头美化、对齐的问题 经常操作QTableView,遇到表头无法对齐所在容器的情况,如下图所示: ,当表头不能和QTableView控件宽度一致时,及其影响美观。 解决办法 在QTableView里 ui->...
  • QT QTableView QTableWidget 复杂表头(多行表头) 、(冻结、固定特定的行),具体效果看博客: https://blog.csdn.net/xiezhongyuan07/article/details/82857631
  • 作为上班族都知道对于做表格来说最麻烦的就是搭建表头 教你几招,让你对做表格这件事儿信手拈来晋升为令人羡慕的“表姐、表哥”,有需要的朋友可以尝试操作下。 1、如何制作分项表头 2、如何制作双线复合表头 ...
  • html锁定表头冻结行列

    2018-01-15 16:18:28
    html锁定表头冻结行列html锁定表头冻结行列html锁定表头冻结行列html锁定表头冻结行列
  • jasperreport动态表头

    2015-01-30 16:02:34
    jasperreport实现动态表头的例子
  • sqlite显示表头

    千次阅读 2021-02-02 21:15:51
    “.header on” 启用表头 “.mode column” 使用列模式
  • pyqt5 tablewidget 隐藏表头,设置表头

    千次阅读 2019-10-22 22:47:32
    ##设置水平表头 self.tableStack.setHorizontalHeaderLabels(["输入栈","剩余输入串","所用表达式","动作"]) self.tableAnalyze.verticalHeader().setVisible(False) # 隐藏垂直表头 self.tableAnalyze....
  • 表头单元格的 style 的回调方法,也可以使用一个固定的 Object 为所有表头单元格设置一样的 Style。 Function({row, column, rowIndex, columnIndex})/Object  在表格添加 @header-click=...
  • python读csv文件时指定行为表头或无表头

    万次阅读 多人点赞 2019-02-26 11:01:15
    pd.read_csv()方法中header参数,默认为0,标签为0(即第1行)的行为表头。若设置为-1,则无表头。示例如下: (1)不设置header参数(默认)时: df1 = pd.read_csv('target.csv',encoding='utf-8') df1 (2...
  • 多行表头

    2019-04-01 12:36:40
    说一下多行表头的用法和表签定义, 用标签定义表格的。该表签用于组合html表格的内容。thead元素应该于tbody和tfoot元素结合起来使用。Tbody元素用于对HTML表个中的主体内容进行分组,而tfoot元素用于对HTML表格中...
  • 问题描述ant-design表头数据是请求后台得到后,再请求table内容时,内容数据条数正常,但内容显示为空格,如果不是请求得到则显示正常(请求表table内容前,表头已正常显示);问题出现的环境背景及自己尝试过哪些方法...
  • 这里写自定义目录标题不含表头含有表头: maven依赖: <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.6</...
  • #include "tableheadermenu.h"#includeTableHeaderMenu::TableHeaderMenu(QWidget*parent): QMainWindow(parent){ui.setupUi(this);//设置列数ui.tableWidget->...//表头horHeaderStr << QString:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,509
精华内容 16,203
关键字:

表头