在谷歌表格中执行单元格功能

时间:2021-01-22 12:01:00

标签: google-sheets

我有一个自定义单元格函数 [=sortByWeek("Tasks")],它从不同的工作表中获取数据范围并对其进行排序并将其打印在当前工作表中。

它第一次运行良好,但我想每次其他工作表中的数据更新时都执行它。

这是整个脚本

function sortByWeek(sheetName) {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var sheet = ss.getSheetByName(sheetName);

        var range = sheet.getDataRange();
        var array = range.getValues();

        for (var i = 0; i < array.length; i++) {

            // sort tasks by week number
            for (var j = 0; j < i; j++) {
                if (array[i][2] < array[j][2]) {
                    var x = array[i];
                    array[i] = array[j];
                    array[j] = x;
                }
            }
        }

        // insert rows between different weeks;
        var arrayFinal = [];
        let same = array[0][2];
        let total = 0;
        for (var e = 0; e < array.length; e++) {
            var string = [[""],["QWERTY", "", "", "Week " + same + " total", total, "x", ""],[""]];
            
            if (array[e][2] === same) {
                total = total + array[e][4];
                arrayFinal.push(array[e]);
            } else {
                if (!(e === 0)) {
                    for (var s = 0; s < string.length; s++) {
                        arrayFinal.push(string[s]);
                        total = 0;
                    }
                }
                arrayFinal.push(array[e]);
            }
            same = array[e][2];
        }
        for (var s = 0; s < string.length; s++) {
            arrayFinal.push(string[s]);
        }
        return arrayFinal;
    }

1 个答案:

答案 0 :(得分:1)

假设“任务”是工作表(标签)的名称,试试

=sortByWeek("Tasks", Tasks!A:Z)

第二个参数是“虚拟”参数:自定义函数中不使用它,但如果编辑了范围(在第二个参数中指示),它将强制重新计算自定义公式。