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

更新其他工作表时更新谷歌“主”电子表格

翁翰墨
2023-03-14

我有多个谷歌电子表格与预订数据,如预订号码,客户端名称,电子邮件,预订日期等。在所有工作表中,这些列的顺序并不相同。

我想在一个“主”电子表格中更新我所有“源”表中的所有数据。这意味着,一旦添加新行或更新现有行,数据将同步到主电子表格

实现这一目标的最佳方式是什么?Javascript或者是否存在一些现有的Google Sheets插件?

示例表1:快速船预订

示例表2:机场中转预订

主表

非常感谢大家关注这个!

大多数人建议使用“importrange”,但我认为这不适用于我的用例。

我也知道Zapier可以实现这一目标,但支付这么多电击费用会变得非常昂贵。我相信还有另一种解决办法。

我还没有开始使用的任何代码:-/

我希望主数据表中的数据按提交日期和时间排序,如下所示:

共有2个答案

严安志
2023-03-14

作为应用脚本触发器不会被自动工作表更新触发的一种解决方案,您需要使用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);
    } 
    

    确保使用您的值更改所有电子表格ID和图纸名称。

  • 冯德宇
    2023-03-14

    使用公式的一般步骤如下:

    1. 使用IMPORTRANGE从源电子表格获取数据到主电子表格
    2. 使用数组表示法将导入的数据放在一起

    笔记:

    如果您不熟悉使用IMPORTRANGE、Google Sheets中的数组和复杂公式,请为每个IMPORTRANGE使用一个工作表,并删除未使用的列以保存单元格,因为Google Sheets500万单元格限制

    如果您喜欢使用脚本,您应该获得电子表格键或URL,然后您可以使用SpreadsheetApp.openById(id)SpreadsheetApp.openByUrl(url)来打开电子表格。然后,您可以使用getVales()/setVales()从源电子表格读取/写入值到主电子表格。

    工具书类

    • 在谷歌工作表中使用数组

    相关的

    • 是否可以在Google Apps脚本中执行重要范围?
    • 导入多个Google工作表到一个垂直列的重要性?
     类似资料:
    • 可编辑链接-https://docs.google.com/spreadsheets/d/1vrzchTHVwwzc9wgFGmtc_zBsh27CEtE7KOyeNDuLwC0/edit?usp=sharing 发布至网页-https://docs.google.com/spreadsheets/d/e/2PACX-1vRaJd3YpKnemAneU47RI58m7cxQsYFdViFBxJPV

    • 我有一个正在写的剧本,需要一些帮助。 首先,我的脚本应该如何工作。 脚本:用户填写谷歌表单并点击提交。提交后,我的脚本运行并从google工作表中读取我在工作表中操作的一系列数据单元。然后将数据单元格格式化为字符串,并在表单的确认消息中提示。 现在问题来了。 问题:当我提交我对表格的回复时,从表格到表格的一切都很好。当我手动运行代码时,代码工作正常。当我提交表单响应时,事件历史记录会显示触发器并说

    • 我在PHP服务器中使用以下代码更新单元格中的值 运行此请求时,收到以下错误: 在PHP中,一次更新多个不连续单元格的GoogleSheetsAPI请求的正确方法是什么?

    • 我正在测试新的谷歌电子表格,因为我真的需要一个新功能:200张的限制已经取消(更多信息:https://support.google.com/drive/answer/3541068)。 但是,我不能像旧版本那样将电子表格发布到CSV。我去“档案室” 发布的“不支持的功能”文档中未提及此限制,该文档位于:https://support.google.com/drive/answer/3543688

    • 我设法使用以下代码在谷歌驱动器上创建电子表格。现在我想在创建的电子表格中添加新表。 当我创建新的电子表格时,它包含名为Sheet1的默认工作表,但我想重命名该工作表或在电子表格中插入多个工作表

    • 试图复制整个电子表格,但我想没有api可以这样做。 基本上,我正在尝试做以下工作: 有一个电子表格,我想对其进行小的更改。 创建一个新的电子表格,将模板中的所有表格逐个复制到新的电子表格中(电子表格复制会更有效率) 创建新的电子表格工作正常,但从电子表格复制表格不起作用。 尝试了两种方法: 角: 给出以下错误: 对飞行前请求的响应未通过访问控制检查:无“访问控制允许原点” Google Sheet