Google apps script 更新谷歌";大师;更新其他工作表时的电子表格
我有多个谷歌电子表格,上面有预订数据,如预订号码、客户姓名、电子邮件、预订日期等。所有表格中这些列的顺序都不相同 我想在一个“主”电子表格中更新我所有“源”表中的所有数据。这意味着,一旦添加新行或更新现有行,数据将同步到主电子表格 实现这一目标的最佳方式是什么?Javascript或者是否存在一些现有的Google Sheets插件 非常感谢所有关注此事的人 大多数人建议使用“importrange”,但我认为这不适用于我的用例 我也知道Zapier可以实现这一目标,但支付这么多Zap的费用将变得非常昂贵。我相信还有另一个解决办法 我还没有开始使用的任何代码:-/Google apps script 更新谷歌";大师;更新其他工作表时的电子表格,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有多个谷歌电子表格,上面有预订数据,如预订号码、客户姓名、电子邮件、预订日期等。所有表格中这些列的顺序都不相同 我想在一个“主”电子表格中更新我所有“源”表中的所有数据。这意味着,一旦添加新行或更新现有行,数据将同步到主电子表格 实现这一目标的最佳方式是什么?Javascript或者是否存在一些现有的Google Sheets插件 非常感谢所有关注此事的人 大多数人建议使用“importrange”,但我认为这不适用于我的用例 我也知道Zapier可以实现这一目标,但支付这么多Zap的费
我希望主数据表中的数据按提交日期和时间进行排序,如下所示:使用公式的一般步骤是
IMPORTRANGE
将数据从源电子表格中获取到主电子表格中IMPORTRANGE
、谷歌工作表中的数组和复杂公式,请为每个IMPORTRANGE
使用一张工作表,并删除未使用的列以保存单元格,因为谷歌工作表限制了500万个单元格
如果您更喜欢使用脚本,则应获取电子表格键或url,然后可以使用SpreadsheetApp.openById(id)
或SpreadsheetApp.openByUrl(url)
打开电子表格。然后可以使用getValues()
/setValues()
将源电子表格中的值读/写到主电子表格中
参考资料
IMPORTRANGE
将数据从源电子表格中获取到主电子表格中IMPORTRANGE
、谷歌工作表中的数组和复杂公式,请为每个IMPORTRANGE
使用一张工作表,并删除未使用的列以保存单元格,因为谷歌工作表限制了500万个单元格
如果您更喜欢使用脚本,则应获取电子表格键或url,然后可以使用SpreadsheetApp.openById(id)
或SpreadsheetApp.openByUrl(url)
打开电子表格。然后可以使用getValues()
/setValues()
将源电子表格中的值读/写到主电子表格中
参考资料
主电子表格中的所有空行
主电子表格的内容导入其中:
功能更改(e){
var masterSheet=SpreadsheetApp.getActive().getSheetByName(“Sheet1”);
如果(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');
getRange(FBsheet.getLastRow()+1,startCol,numRows,numCols).setValues(值);
var ATlastRow=ATsheet.getLastRow();
对于(var i=0;i,作为自动工作表更新未触发的应用程序脚本触发器的解决方法,您需要使用IMPORTRANGE将数据导入虚拟工作表。IMPORTRANGE还将通过自动工作表更新进行检测,同时能够触发OneEdit触发器
请执行以下操作:
删除主电子表格中的所有空行
创建一个虚拟电子表格,并使用公式将主电子表格的内容导入其中:
从虚拟工作表中,打开脚本编辑器并插入以下代码:
功能更改(e){
var masterSheet=SpreadsheetApp.getActive().getSheetByName(“Sheet1”);
如果(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');
getRange(FBsheet.getLastRow()+1,startCol,numRows,numCols).setValues(值);
var ATlastRow=ATsheet.getLastRow();
对于(var i=0;i如何添加/更新源工作表中的行?这些行是逐单元格手动填充还是由表单/脚本填充
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);
}