繁体   English   中英

使用Apps脚本触发工作表中的所有功能

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM