使用Apps脚本

时间:2017-10-31 13:10:33

标签: javascript google-apps-script google-sheets

我想通过一些功能皮条客我的私人家庭谷歌表。因此,我写了一个带有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;  
}

2 个答案:

答案 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();