我有多个Google电子表格,其中包含预订数据,例如预订号,客户名称,电子邮件,预订日期等。这些列的顺序在所有工作表中都不相同。
我想在一个“主”电子表格中更新所有“源”表中的所有数据。意味着一旦添加新行或更新现有行,数据就会同步到主电子表格
实现这一目标的最佳方法是什么? Javascript还是有一些现有的Google表格插件?
Example sheet 1: Fast boat bookings
Example sheet 2: Airport transfer bookings
非常感谢大家对此的关注!
大多数人建议使用“ importrange”,但我认为这不适用于我的用例。
我也知道Zapier可以实现,但是要花那么多的钱花很多钱。我相信还有另一种解决方案。
我还没有任何代码可以开头:-/
我希望主表中的数据按提交日期和时间进行排序,如下所示:
答案 0 :(得分:0)
使用公式的一般步骤是
IMPORTRANGE
将数据从源电子表格获取到主电子表格注意:
如果您不熟悉使用IMPORTRANGE
,Google表格中的数组和复杂公式,请为每个IMPORTRANGE
使用一张表格,并删除未使用的列以保存单元格,因为Google表格限制了500万个单元格
如果您更喜欢使用脚本,则应获取电子表格密钥或URL,然后可以使用SpreadsheetApp.openById(id)
或SpreadsheetApp.openByUrl(url)
打开电子表格。然后,您可以使用getValues()
/ setValues()
来将值从源电子表格读取/写入到主电子表格。
参考
相关
答案 1 :(得分:0)
作为自动工作表更新不会触发的Apps脚本触发器的一种解决方法,您需要使用IMPORTRANGE将数据导入到虚拟工作表中。 IMPORTRANGE还将通过自动更新工作表进行检测,并且同时能够触发onEdit触发器。
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);
}
onEdit
trigger MASTER spreadsheet
中进行数据更新时,脚本将自动运行。 请确保使用您的所有电子表格ID和工作表名称进行更改 值。