Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 更新谷歌";大师;更新其他工作表时的电子表格_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 更新谷歌";大师;更新其他工作表时的电子表格

Google apps script 更新谷歌";大师;更新其他工作表时的电子表格,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有多个谷歌电子表格,上面有预订数据,如预订号码、客户姓名、电子邮件、预订日期等。所有表格中这些列的顺序都不相同 我想在一个“主”电子表格中更新我所有“源”表中的所有数据。这意味着,一旦添加新行或更新现有行,数据将同步到主电子表格 实现这一目标的最佳方式是什么?Javascript或者是否存在一些现有的Google Sheets插件 非常感谢所有关注此事的人 大多数人建议使用“importrange”,但我认为这不适用于我的用例 我也知道Zapier可以实现这一目标,但支付这么多Zap的费

我有多个谷歌电子表格,上面有预订数据,如预订号码、客户姓名、电子邮件、预订日期等。所有表格中这些列的顺序都不相同

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

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

非常感谢所有关注此事的人

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

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

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


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

使用公式的一般步骤是

  • 使用
    IMPORTRANGE
    将数据从源电子表格中获取到主电子表格中
  • 使用数组表示法将导入的数据放在一起
  • 注:

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

    如果您更喜欢使用脚本,则应获取电子表格键或url,然后可以使用
    SpreadsheetApp.openById(id)
    SpreadsheetApp.openByUrl(url)
    打开电子表格。然后可以使用
    getValues()
    /
    setValues()
    将源电子表格中的值读/写到主电子表格中

    参考资料

    相关的


    使用公式的一般程序如下

  • 使用
    IMPORTRANGE
    将数据从源电子表格中获取到主电子表格中
  • 使用数组表示法将导入的数据放在一起
  • 注:

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

    如果您更喜欢使用脚本,则应获取电子表格键或url,然后可以使用
    SpreadsheetApp.openById(id)
    SpreadsheetApp.openByUrl(url)
    打开电子表格。然后可以使用
    getValues()
    /
    setValues()
    将源电子表格中的值读/写到主电子表格中

    参考资料

    相关的


    作为自动工作表更新不会触发应用程序脚本触发器的解决方法,您需要使用IMPORTRANGE将数据导入虚拟工作表。IMPORTRANGE还将通过自动工作表更新进行检测,同时能够触发OneEdit触发器

    请执行以下操作:
  • 删除
    主电子表格中的所有空行

  • 创建一个虚拟电子表格,并使用公式将
    主电子表格的内容导入其中:
    

  • 从虚拟工作表中,打开脚本编辑器并插入以下代码:
  • 
    功能更改(e){
    var masterSheet=SpreadsheetApp.getActive().getSheetByName(“Sheet1”);
    如果(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');
    getRange(FBsheet.getLastRow()+1,startCol,numRows,numCols).setValues(值);
    var ATlastRow=ATsheet.getLastRow();
    
    对于(var i=0;i,作为自动工作表更新未触发的应用程序脚本触发器的解决方法,您需要使用IMPORTRANGE将数据导入虚拟工作表。IMPORTRANGE还将通过自动工作表更新进行检测,同时能够触发OneEdit触发器

    请执行以下操作:
  • 删除
    主电子表格中的所有空行

  • 创建一个虚拟电子表格,并使用公式将
    主电子表格的内容导入其中:
    

  • 从虚拟工作表中,打开脚本编辑器并插入以下代码:
  • 
    功能更改(e){
    var masterSheet=SpreadsheetApp.getActive().getSheetByName(“Sheet1”);
    如果(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');
    getRange(FBsheet.getLastRow()+1,startCol,numRows,numCols).setValues(值);
    var ATlastRow=ATsheet.getLastRow();
    
    对于(var i=0;i如何添加/更新源工作表中的行?这些行是逐单元格手动填充还是由表单/脚本填充
    
    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);
    }