![](/img/trans.png)
[英]Writing data to master Google Spreadsheet from multiple other sheets; am overwriting results of each feeder sheet instead of getting all results
[英]Update google "master" spreadsheet when other sheets are updated
我有多個包含預訂數據的 Google 電子表格,例如預訂編號、客戶姓名、電子郵件、預訂日期等。這些列在所有表格中的順序並不相同。
我想在一個“主”電子表格中更新所有“源”表中的所有數據。 這意味着一旦添加新行或更新現有行,數據將同步到主電子表格
實現這一目標的最佳方法是什么? Javascript 或是否有一些現有的 Google Sheets 插件?
非常感謝所有調查此事的人!
大多數人建議使用“importrange”,但我認為這不適用於我的用例。
我也知道它可以通過 Zapier 實現,但是支付這么多 zaps 會變得昂貴。 我相信還有另一種解決方案。
我還沒有任何代碼可以開始:-/
我希望主表中的數據按提交日期和時間排序,如下所示:
使用公式的一般過程是
IMPORTRANGE
將源電子表格中的數據導入到主電子表格中筆記:
如果您不IMPORTRANGE
使用IMPORTRANGE
、Google 表格中的數組和復雜公式,請為每個IMPORTRANGE
使用一張表格,並刪除未使用的列以保存單元格,因為 Google 表格 500 萬個單元格限制
如果您更喜歡使用腳本,您應該獲得電子表格鍵或 URL,然后您可以使用SpreadsheetApp.openById(id)
或SpreadsheetApp.openByUrl(url)
打開電子表格。 然后您可以使用getValues()
/ setValues()
從源電子表格讀取/寫入值到主電子表格。
參考
有關的
作為自動工作表更新不會觸發 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
觸發器附加到腳本MASTER spreadsheet
數據更新時,腳本都會自動運行。確保使用您的值更改所有電子表格 ID 和工作表名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.