【问题标题】:Push Updates To Multiple Google Sheets From Master Sheet将更新从主工作表推送到多个 Google 工作表
【发布时间】:2020-03-17 20:47:25
【问题描述】:

有没有办法扫描多个 Google 表格以从主表格中的某个键上查找匹配项,并在适用的情况下更新 Google 表格中的单元格?

例如,下面我有 4 张纸。第一个是主人,其他的是孩子。如果 Master 的任何工作表中的 A 列(初始名称)匹配,则更新 C 列(金额)和 D(日期)中的单元格,否则保持工作表不变。在此示例中,Master 的倡议名称为“G”,金额为“50”,日期为“2020 年 4 月 1 日”。孩子 1 的倡议名称为“G”,金额为“30”,日期为“2020 年 3 月 1 日”。我想将更新推送到子 1,并仅使用主模板的内容更新金额和日期,同时将子 1 中的其他所有内容保持不变,也不更新子 2 或 3(因为倡议名称不匹配)。

主表 - https://docs.google.com/spreadsheets/d/18tWKLly6Hp6cF_9Qlqbjqq1OF0ix-FCR39i__gJyS7Q/edit#gid=0

孩子 1 - https://docs.google.com/spreadsheets/d/1FDGQapk5In8DLC6DnFSJjFHTIhe7mUFSPPz1j0mXHz0/edit#gid=0

孩子 2 - https://docs.google.com/spreadsheets/d/1mFiBIXt1xQntNXb9g2mWrBpc0saEpQu8ZHB-91l5Arw/edit#gid=0

孩子 3 - https://docs.google.com/spreadsheets/d/1teBZ85VcVAePD_e_vp1f4MMnbRTR6JoZWLfF4oZxmTc/edit#gid=0

【问题讨论】:

  • 您是否总是希望子工作表显示主工作表中的数据?子表中的行在主表中是否总是有匹配的行?
  • 您可以使用IMPORTRANGE 从其他工作表中提取数据。因此,在子表中,您可以使用IMPORTRANGE 从主表中提取数据,然后在子表中显示与子表中其他列匹配的数据。
  • 如果子工作表将具有不在主工作表中的启动项,那么您将必须有一些更新子工作表的重复作业或更新子工作表上的 onEdit 触发器床单。

标签: google-apps-script google-sheets


【解决方案1】:

您可以按照以下方式做一些事情(检查内联 cmets):

function updateChildren() {
  var childrenIds = ["child1-id", "child2-id", "child3-id"]; // Array with the ids of the children, modify accordingly (can be more than 3)
  var master = SpreadsheetApp.openById("master-id"); // Master id (modify accordingly)
  var children = [];
  var masterSheet = master.getSheetByName("Summary"); // Name of the Master sheet with data
  // Get the source values in Master:
  var firstRow = 2;
  var firstCol = 1;
  var numRows = masterSheet.getLastRow() - firstRow + 1;
  var numCols = masterSheet.getLastColumn() - firstCol + 1;
  var masterValues = masterSheet.getRange(firstRow, firstCol, numRows, numCols).getValues();
  childrenIds.forEach(function(childId) { // Iterate through each children id
    var childSheet = SpreadsheetApp.openById(childId).getSheetByName("Summary"); // Get sheet with data (sheet is named "Summary")
    var childNumRows = childSheet.getLastRow() - firstRow + 1;
    var childValues = childSheet.getRange(firstRow, firstCol, childNumRows, numCols).getValues(); // Get child values
    masterValues.forEach(function(masterRow) { // Iterate through each row with data in Master
      childValues.forEach(function(childRow, i) { // Iterate through each row with data in Child
        if (masterRow[0] === childRow[0]) { // Check if there is a match in column A
          childSheet.getRange(i + firstRow, 3, 1, 2).setValues([[masterRow[2], masterRow[3]]]); // Update columns C-D in Child
        }
      });  
    });
  });
}

参考:

【讨论】:

  • 绝对出色的 Iamblichus。这很完美。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 2016-12-04
  • 2017-06-13
  • 2012-08-30
  • 1970-01-01
相关资源
最近更新 更多