Dou*_*Fir 0 google-sheets google-apps-script
我有一个脚本来更新命名范围,当新的数据行添加到相关的电子表格时:
function updateNamedRanges() {
// get to the right place
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('ga weekly data pull');
//now update the named ranges if they have changed in length
var openEnded = ["gaCampaign", "gaMedium", "gaSource", "gaSubscriptions", "gaUsers", "gaWeek"];
for(i in openEnded) {
var r = ss.getRangeByName(openEnded[i]);
var rlr = r.getLastRow();
var s = r.getSheet();
var slr = s.getMaxRows();
if(rlr==slr ) continue; // ok as is-skip to next name
var rfr = r.getRow();
var rfc = r.getColumn();
var rnc = r.getNumColumns();
var rnr = slr - rfr + 1;
ss.removeNamedRange(openEnded[i]);
ss.setNamedRange( openEnded[i], s.getRange(rfr, rfc, rnr, rnc ));
}
sheet.getRange("D2").setValue(0); // this gets all the formulas in the sheet to update - just changing any cell
}
Run Code Online (Sandbox Code Playgroud)
然后,在Aps脚本编辑器中,我转到资源>当前项目触发器>运行updateNamedRanges>从电子表格>更改.
现在,如果我手动添加一行数据,脚本就会运行 - 太棒了!
但我正在使用Google Analytics添加数据.当数据长度超过工作表时,此附加扩展了有问题的选项卡.但是当发生这种情况时,脚本不会更新.
我能在这做什么吗?
作为备份,我在想如果我能弄清楚如何让GAS从表格的底部添加一行可能会这样做,但这似乎是一种解决方法.在我走这条路之前有更好的方法吗?
如您所知,应用程序脚本触发器仅在应用程序脚本执行更改时才起作用.是的,它的跛脚.如果应用程序脚本外的api修改了工作表,则它们不会触发.
您唯一的选择是使用时间触发器来检测更改并再次处理整个工作表(因为您不知道更改了什么).更有效地实现此目的的一种方法是记住(在脚本属性中)触发器的最后修改日期.然后1分钟时间触发器检查修改日期现在是否大于最后保存的日期.如果这样处理整个表格.
| 归档时间: |
|
| 查看次数: |
1175 次 |
| 最近记录: |