[英]Trigger all functions in a Sheet with Apps Script
我想用一些功能设置我的私人家庭Google工作表。 因此,我编写了一个带for循环的函数,以对1-1000行进行迭代以计算我花了多少钱。 该函数有效,并且可以正确计算数字。 一切都很好,但是...
我的问题:添加一些值后,我必须重新加载整个页面才能使函数再次运行。
我想要的是:我想编写一个函数来触发工作表中所有函数的重新运行。 因此,我创建了一个可以单击的按钮。
我试过的
SpreadsheetApp.flush();
如此处所述,但没有成功。 进行了一些处理,但未更改任何值。
编辑31.10.2017
这是我写的代码。 我想在每次编辑电子表格时执行它。
function sumValues(startRow, startColumn) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName("MySheet");
var range = sheet.getRange(startRow, startColumn, 1000);
var data = range.getValues();
var costs = calculate(data);
return costs;
}
function calculate(data) {
var cost = 0;
var size = data.length;
for(var i=0; i<size; i=i+1) {
var current = data[i][0];
if(typeof current == 'number') {
cost = cost + current;
}
}
return cost;
}
如果以这种方式编写函数,它将把工作表中的所有数据收集到一个数组中。 您可以非常快速地在此数组中执行功能,然后一次更新整个电子表格
function yourFunction()
{
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getDataRange();
var vA=rg.getValues();//you now have an array of all values in your sheet
for(var i=0;i<vA.length;i++)//if your data does start until row n then set i=n-1
{
//perform your line by line calculations here
}
rg.setValues(vA);//Writes all of your changes all at once
}
每当您打开电子表格时,这将运行您的功能,以便您可以对其进行检查。 另外,它还会创建一个名为“我的工具”的下拉菜单,您可以从中再次运行它。
当您使用数组时,请记住索引是从零开始的,而不是从一开始的索引,因此,如果要在每行上将column1添加到column2,则将为vA [i] [0] + vA [i] [1]。 如果希望在电子表格中添加列以放入计算值,则只需添加另一个标头,并且getDataRange()函数将始终返回非锯齿状的数组。
function onOpen()
{
SpreadsheetApp.getUi().createMenu('My Tools').addItem('Run Function', 'yourFunction')
yourFunction();
}
您可以在电子表格上的OnEdit上放置一个触发器,这样,每次在工作表中进行编辑时,它就会运行该功能。 Google App脚本
然后添加SpreadsheetApp.flush();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.