簡體   English   中英

更新其他工作表時更新谷歌“主”電子表格

[英]Update google "master" spreadsheet when other sheets are updated

我有多個包含預訂數據的 Google 電子表格,例如預訂編號、客戶姓名、電子郵件、預訂日期等。這些列在所有表格中的順序並不相同。

我想在一個“主”電子表格中更新所有“源”表中的所有數據。 這意味着一旦添加新行或更新現有行,數據將同步到主電子表格

實現這一目標的最佳方法是什么? Javascript 或是否有一些現有的 Google Sheets 插件?

示例表 1:快艇預訂

示例表 2:機場接送預訂

主表

非常感謝所有調查此事的人!

大多數人建議使用“importrange”,但我認為這不適用於我的用例。

我也知道它可以通過 Zapier 實現,但是支付這么多 zaps 會變得昂貴。 我相信還有另一種解決方案。

我還沒有任何代碼可以開始:-/

我希望主表中的數據按提交日期和時間排序,如下所示:

使用公式的一般過程是

  1. 使用IMPORTRANGE將源電子表格中的數據導入到主電子表格中
  2. 使用數組表示法將導入的數據放在一起

筆記:

如果您不IMPORTRANGE使用IMPORTRANGE 、Google 表格中的數組和復雜公式,請為每個IMPORTRANGE使用一張表格,並刪除未使用的列以保存單元格,因為 Google 表格 500 萬個單元格限制

如果您更喜歡使用腳本,您應該獲得電子表格鍵或 URL,然后您可以使用SpreadsheetApp.openById(id)SpreadsheetApp.openByUrl(url)打開電子表格。 然后您可以使用getValues() / setValues()從源電子表格讀取/寫入值到主電子表格。

參考

有關的

作為自動工作表更新不會觸發 Apps 腳本觸發器的解決方法,您需要使用 IMPORTRANGE 將數據導入到虛擬工作表中。 IMPORTRANGE 還將通過自動工作表更新進行檢測,同時它能夠觸發 onEdit 觸發器。

請執行下列操作:

  1. 刪除MASTER spreadsheet所有空行

  2. 創建一個虛擬電子表格並使用公式將MASTER spreadsheet的內容導入其中: 在此處輸入圖片說明

  3. 從虛擬表中,打開腳本編輯器並插入以下代碼:

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 觸發器附加到腳本
  2. 手動運行一次腳本,它會拋出一個錯誤是正常的
  3. 現在,每次在MASTER spreadsheet數據更新時,腳本都會自動運行。

確保使用您的值更改所有電子表格 ID 和工作表名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM