GSheets: Script running very slowly and sometimes not performing task on all sheets
我的电子表格:链接
我有以下脚本,它应该使我能够控制在特定工作表(A、B、C、D、E)上隐藏/取消隐藏的列。打开工作表有一个触发器。如果我从脚本编辑器运行脚本,它确实会非常缓慢地逐张执行任务。但是,如果我尝试打开电子表格,它从工作表 A 开始,然后是 B,但没有在 B 中完成。知道当前用户没有输入数据,我想知道这是否是最好的方法(害怕在最后运行计算和此脚本非常缓慢的电子表格)
你能帮忙完成这个小任务吗?我对编写脚本不太了解,这只是我在互联网上找到的一些复制/粘贴,
感谢您的宝贵时间!
基本上:我试图控制显示哪一周,我会显示第 1 周并隐藏其余部分,然后在接下来的一周,我会显示第 2 周并隐藏其余部分,等等...
脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function hideColumnsOnSheet(sheetName) { var b = SpreadsheetApp.getActive().getSheetByName(sheetName); b.showColumns(1, b.getMaxColumns()); b.getRange('4:4') .getValues()[0] .forEach(function (r, i) { if (r && r == 'x') b.hideColumns(i + 1) }); } function onOpen() { hideColumnsOnSheet("A"); hideColumnsOnSheet("B"); hideColumnsOnSheet("C"); hideColumnsOnSheet("D"); hideColumnsOnSheet("E"); } |
扭转您原来的方式来减少昂贵的 API 调用。在开头隐藏所有列,在第4行找到第一列和最后一列有空格,然后显示中间的所有列,我修改了如下方法:
更新
由于一开始不能隐藏所有列,我们将方法反向,但仍然减少到只有两个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | function hideColumnsOnSheet(sheetName) { var b = SpreadsheetApp.getActive().getSheetByName(sheetName); b.showColumns(1, b.getMaxColumns()); var visibleColumn = []; b.getRange('J4:4').getValues()[0].forEach(function (r, i) { if (r != 'x') { visibleColumn.push(i + 1); } }); var freezeColumnsNum = 9; var indexOfFirstShowColumn = parseInt(visibleColumn[0] + freezeColumnsNum); var indexOfLastShowColumn = parseInt(visibleColumn.pop() + freezeColumnsNum); if (indexOfFirstShowColumn != (freezeColumnsNum + 1)) { b.hideColumns(freezeColumnsNum + 1, (indexOfFirstShowColumn - 1) - freezeColumnsNum); } b.hideColumns(indexOfLastShowColumn + 1, (b.getMaxColumns() - indexOfLastShowColumn)); } function onOpen(e) { hideColumnsOnSheet("A"); hideColumnsOnSheet("B"); hideColumnsOnSheet("C"); hideColumnsOnSheet("D"); hideColumnsOnSheet("E"); } |