我想通过一些功能皮条客我的私人家庭谷歌表。因此,我写了一个带有for循环的函数来遍历行1-1000以计算我花了多少钱。该功能有效,可正确计算数字。一切都很好,但是......
我的问题: 在我添加了一些值之后,我必须重新加载整个页面以使函数再次运行。
我想要的是什么: 我想编写一个函数来触发我工作表中所有函数的重新运行。因此,我创建了一个可以单击的按钮。
我尝试了什么:
SpreadsheetApp.flush();
如here所述,但它不起作用。有一些处理但没有改变价值。
编辑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;
}
答案 0 :(得分:0)
如果以这种方式编写函数,它会将工作表中的所有数据收集到一个数组中。您可以非常快速地在此阵列中执行您的功能,然后一次更新整个电子表格
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();
}
答案 1 :(得分:-1)
您可以在电子表格上放置OnEdit上的触发器,这样每次编辑工作表中的内容时,它都会运行该功能。 Google App Script
然后添加SpreadsheetApp.flush();