页面树结构
转至元数据结尾
转至元数据起始

(此文档仅供参考)

需求

某些情况下想实现导出后的文档不需要显示隐藏的列,需要删除。

实现方案

需要写服务端宏代码实现,实现代码如下:

针对分组报表,输出类型是“EXCEL2007”,代码如下:

function main(spreadsheetReport) {
    if (spreadsheetReport.outputType != "EXCEL2007") return;
    spreadsheetReport.cacheable = false;
    var workbook = spreadsheetReport.workbook;
    var worksheet = workbook.worksheets.get(0);
    worksheet.getCells().deleteColumn(0);  //删除隐藏的列
}


如果隐藏的列有被其它单元格引用,可以使用下面的报表宏实现导出删除:

function main(spreadsheetReport) {
    if (spreadsheetReport.outputType != "EXCEL2007") return;
    spreadsheetReport.cacheable = false;
    var workbook = spreadsheetReport.workbook;
    var worksheets = workbook.worksheets;
    for (var i = 0; i < worksheets.count; i++) {
        var worksheet = worksheets.get(i);
        var cells = worksheet.cells;
        var maxDisplayRange = cells.maxDisplayRange;
        for (var x = 0; x < maxDisplayRange.rowCount; x++) {
            for (var y = 0; y < maxDisplayRange.columnCount; y++) {
                var cell = cells.get(x, y);
                if (cell.isFormula()) {
                    cell.value = cell.value;
                }
            }
        }
    }
     worksheet.getCells().deleteColumn(3);  //删除隐藏的列,行列是从0开始计算的,即A列为第0列,第一行为0
     //  worksheets.get("sheet名称").cells.deleteColumn(6); //如果有多个sheet,需要指定对应的sheet进行删除,sheet名称对应实际的设置的sheet名称即可
     //  worksheets.get("sheet名称").cells.deleteRow(30); ////如果有多个sheet,需要指定对应的sheet进行删除
}

   

 针对清单报表,输出类型是“LIST_EXCEL”,可直接将上面的代码中的“EXCEL2007”修改为“LIST_EXCEL”即可执行,如图:

 


2 评论

  1. 夏婷婷 发表:

    worksheet.getCells().deleteRow(0); //删除隐藏的行

  2. 甘雅君 发表:

    如果要隐藏多列,建议这么实现:
    如下,我需要隐藏四列,可以从右往左边填写需删除的列,依次填写如下:

    worksheet.getCells().deleteColumn(11);
    worksheet.getCells().deleteColumn(10);
    worksheet.getCells().deleteColumn(8);
    worksheet.getCells().deleteColumn(7);


    如果需要从左边往右边填写删除列的话,因为for循环会依次读取,删除列需要每一次重新从0开始读取,所以修改位置的列需要按实际读取填写,上面的删除7,8,10,11列,对应需要从左往右边填写代码如下:

    worksheet.getCells().deleteColumn(7);
    worksheet.getCells().deleteColumn(7);
    worksheet.getCells().deleteColumn(8);
    worksheet.getCells().deleteColumn(8);

    或者使用for循环去删除,如下,但并不是所有的场景都适用,需要根据自己的场景调整相应的宏代码:
    function main(spreadsheetReport) {
    if (spreadsheetReport.outputType != "EXCEL2007") return;

    spreadsheetReport.cacheable = false;
    var workbook = spreadsheetReport.workbook;
    var worksheets = workbook.worksheets;
    for (var i = 0; i < worksheets.count; i++) {
    var worksheet = worksheets.get(i);
    var cells = worksheet.cells;
    var maxDisplayRange = cells.maxDisplayRange;
    var isDeleteHidden = false;
    //删除表格中所有隐藏列
    for (var z = 0; z < maxDisplayRange.columnCount; z++) {
    if (cells.getColumn(z).isHidden()) {
    worksheet.cells.deleteColumn(z);
    isDeleteHidden = true;
    z--;
    }
    }

    }
    }