其他工作表更新时更新Google“主”电子表格

时间:2019-09-09 06:31:19

标签: google-apps-script google-sheets

我有多个Google电子表格,其中包含预订数据,例如预订号,客户名称,电子邮件,预订日期等。这些列的顺序在所有工作表中都不相同。

我想在一个“主”电子表格中更新所有“源”表中的所有数据。意味着一旦添加新行或更新现有行,数据就会同步到主电子表格

实现这一目标的最佳方法是什么? Javascript还是有一些现有的Google表格插件?

Example sheet 1: Fast boat bookings

Example sheet 2: Airport transfer bookings

Master sheet

非常感谢大家对此的关注!

大多数人建议使用“ importrange”,但我认为这不适用于我的用例。

我也知道Zapier可以实现,但是要花那么多的钱花很多钱。我相信还有另一种解决方案。

我还没有任何代码可以开头:-/

我希望主表中的数据按提交日期和时间进行排序,如下所示:

2 个答案:

答案 0 :(得分:0)

使用公式的一般步骤是

  1. 使用IMPORTRANGE将数据从源电子表格获取到主电子表格
  2. 使用数组表示法将导入的数据放在一起

注意:

如果您不熟悉使用IMPORTRANGE,Google表格中的数组和复杂公式,请为每个IMPORTRANGE使用一张表格,并删除未使用的列以保存单元格,因为Google表格限制了500万个单元格

如果您更喜欢使用脚本,则应获取电子表格密钥或URL,然后可以使用SpreadsheetApp.openById(id)SpreadsheetApp.openByUrl(url)打开电子表格。然后,您可以使用getValues() / setValues()来将值从源电子表格读取/写入到主电子表格。

参考

相关

答案 1 :(得分:0)

作为自动工作表更新不会触发的Apps脚本触发器的一种解决方法,您需要使用IMPORTRANGE将数据导入到虚拟工作表中。 IMPORTRANGE还将通过自动更新工作表进行检测,并且同时能够触发onEdit触发器。

执行以下操作:

  1. 删除MASTER spreadsheet

  2. 中的所有空行
  3. 创建一个虚拟电子表格,并使用以下公式将MASTER spreadsheet的内容导入其中: enter image description here

  4. 从哑表中,打开脚本编辑器并插入以下代码:

function changed(e) {
  var masterSheet = SpreadsheetApp.getActive().getSheetByName("Sheet1");
  if(PropertiesService.getScriptProperties().getKeys().length==0){
     PropertiesService.getScriptProperties().setProperty('startRow', 5);
  }
  var startRow=PropertiesService.getScriptProperties().getProperty('startRow');
  var lastRow=masterSheet.getLastRow();
  var numRows=lastRow-startRow+1;
  var startCol=1;
  var numCols=6;
  var values=masterSheet.getRange(startRow,startCol,numRows,numCols).getValues();

  var FBsheet=SpreadsheetApp.openById('1SzBx5Q9rrlcLGSqD8y5eFE5TX304LfZ7D9mxxrHhfKw').getSheetByName('Sheet1');
  var ATsheet=SpreadsheetApp.openById('1IRD8wT5Kmx7h_xP807f4ibWRn8g98RjA-dJXxADXAl0').getSheetByName('Sheet1');

  FBsheet.getRange(FBsheet.getLastRow()+1,startCol, numRows, numCols).setValues(values);
  var ATlastRow=ATsheet.getLastRow();
  for(var i=0;i<numRows;i++){
    Logger.log(values[i][1]);
    ATsheet.getRange(ATlastRow+1+i,1, 1, 1).setValue(values[i][1]);
    ATsheet.getRange(ATlastRow+1+i,2, 1, 1).setValue(values[i][0]);
    ATsheet.getRange(ATlastRow+1+i,3, 1, 1).setValue(values[i][3]);
    ATsheet.getRange(ATlastRow+1+i,4, 1, 1).setValue(values[i][2]);
    ATsheet.getRange(ATlastRow+1+i,5, 1, 1).setValue(values[i][5]);
    ATsheet.getRange(ATlastRow+1+i,6, 1, 1).setValue(values[i][4]);
  }  
  PropertiesService.getScriptProperties().setProperty('startRow',  lastRow+1);
} 
  1. 在脚本中附加onEdit trigger
  2. 手动运行脚本一次,通常会引发错误
  3. 现在,每次在MASTER spreadsheet中进行数据更新时,脚本将自动运行。
  

请确保使用您的所有电子表格ID和工作表名称进行更改   值。