当前位置: 首页 > 知识库问答 >
问题:

从主工作表将更新推送到多个Google工作表

谢飞舟
2023-03-14

是否有一种方法可以扫描多个Google工作表,从键上的主工作表中找到匹配项,并在适用的情况下更新Google工作表中的单元格?

例如,下面我有4张。第一个是主人,其他的是孩子。如果来自Master的任何工作表的A列(倡议名称)上有匹配,则更新C列(金额)和D列(日期)中的单元格,否则保持工作表不变。在本例中,船长的倡议名称为“G”,金额为“50”,日期为“2020年1月4日”。儿童1的倡议名称为“G”,金额为“30”,日期为“2020年1月3日”。我想把更新推到孩子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

共有1个答案

谷梁卓
2023-03-14

您可以按照以下方式进行操作(检查内联注释):

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
        }
      });  
    });
  });
}
  • 数组。原型forEach()
  • 床单。getRange(行、列、numRows、numColumns)
  • 射程。设置值(值)
 类似资料:
  • 我很难让这个代码正常工作。我学了很多,但我是个初学者。 这是剧本: //将新事件推送到日历函数pushToCalendar(){//电子表格变量 var sheet=SpreadsheetApp.getActiveSheet(); var range=sheet.getRange(1,1,5,25); var values=range.getValues(); 这里有一个到假人的链接: https

  • 我对宏是新手,需要帮助。我在一个文件夹中有几个工作簿,每个工作簿有四个工作表。现在我想要一个mocro它复制数据从每个工作簿(工作表明智)和过去在我的主工作簿(工作表明智)意味着数据1应该被粘贴一个在另一个下面在我的主工作簿在工作表1和工作表2分别。*工作簿名称可以是文件夹中的任何东西。有人能帮我完成整个代码吗?我有宏从一张表到我分配的表的数据,但它复制粘贴数据从打开的表,而不是按表名明智的。有人

  • 我有一个多标签谷歌表。第一个是主表,我有一些基本的位置信息。在其他页面中,我通过“导入”传输这些基本信息,因此我有一些列动态更改,一些是静态的,用户可以更新。尽管如此,如果我在主工作表的数据之间添加一行,它只会更改动态列(从importrange更新),而其余列不会更改-这会影响更新。在主工作表中添加行时,是否有任何方法/脚本可以自动在其他工作表中添加行?

  • 为此,我在谷歌上搜索了很多,但不知道怎么做。 我有3家公司为我们提供股票,让我们假设谷歌表单中的公司1、公司2和公司3。 一旦我们添加订单,它将反映在各个公司的谷歌表单订单中。并非所有公司都必须看到所有订单,因为它们可能处理特定项目。 现在每一家公司google sheet都有可用的股票下拉列表,带有(是/否)选项,可以检查特定的订单id是否可行。 我的要求是:如果任何一家公司的股票更新为“是”,

  • 我有一个主谷歌表,有五列,每天自动更新。 同一文档在主表中有三种类型事件的对应表:ABC、DEF和GHI。这些图纸中包含现有值。 我想谷歌应用程序脚本只追加唯一的和新的价值观,从Value1到相应的事件表编辑的主表。例子: 表ABC 工作表DEF 床单GHI 它实际上并不取决于日期,而是查看相应表格中已经存在的内容。 我是谷歌应用脚本的完全初学者。我研究了其他解决方案,我所做的最大努力是找到如何从

  • 试图从当前工作簿“Create Report.xlsm”中复制工作表名称“Headings Explantions”,该工作簿打开到我要求打开的工作簿中,我得到了下标超出范围的错误