Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 Formula - Fatal编程技术网

Google apps script 脚本自动运行时查询导入范围未更新-加载错误

Google apps script 脚本自动运行时查询导入范围未更新-加载错误,google-apps-script,google-sheets-formula,Google Apps Script,Google Sheets Formula,我有一个脚本来粘贴通过电子邮件收到的csv的原始数据。当原始数据粘贴到工作表上时,我希望另一个带有查询导入范围公式的工作表会自动更新新数据 我有第二个脚本从数据透视表中读取数据,数据透视表来自具有这些公式的工作表。但是,当它尝试从透视表读取数据时,我得到一个错误异常:该范围内的行数必须至少为1。。这是因为我的变量numRows等于零 当我手动打开g-doc时,我在工作表上看到一个错误,公式如下:错误加载。 然而,在我打开gdoc的几秒钟之后,范围几乎立即更新,没有任何问题,如果我在这之后手动运行

我有一个脚本来粘贴通过电子邮件收到的csv的原始数据。当原始数据粘贴到工作表上时,我希望另一个带有查询导入范围公式的工作表会自动更新新数据

我有第二个脚本从数据透视表中读取数据,数据透视表来自具有这些公式的工作表。但是,当它尝试从透视表读取数据时,我得到一个错误异常:该范围内的行数必须至少为1。。这是因为我的变量numRows等于零

当我手动打开g-doc时,我在工作表上看到一个错误,公式如下:错误加载。 然而,在我打开gdoc的几秒钟之后,范围几乎立即更新,没有任何问题,如果我在这之后手动运行脚本,它运行起来就没有任何问题

如何确保在更新原始数据后,公式不会因错误加载而受阻?我想自动运行脚本,而不是手动运行。任何提示都是非常受欢迎的

注:

  • 我已经尝试过各种类型的重新计算,但都不起作用(改变、改变和每小时、改变和每分钟)
  • 原始数据大约有2300行
  • 我使用的公式如下:
    =QUERY(IMPORTRANGE(“1OpF8gcrV1Yj8bYP1j5PsHM4VRw2pKZOUmJf6VxGeFdY”,“原始数据!A2:G”),“选择Col1、Col2、Col3、Col4、Col5、Col6、Col7,其中Col2不是Col4 asc、Col1 asc、Col5 asc的空顺序”,0)
  • 此问题可能与导入有关 函数类
    IMPORTHTML
    IMPORTRANGE
    等一直是许多关于自动更新的问题的主题-这种方法通常看起来相当脆弱。我在任何地方都找不到它的文档,但我怀疑这些函数在关闭时会停止计算。或者,如果发生了重新计算,由于某种原因,它们没有被授权,因为它们不再链接到用户会话

    这就是说,尽管我没有使用这种方法,但我已经多次测试过它,它似乎对我有效,尽管我知道有很多人并不适用

    有些人发现,通过取消所有保护措施并公开表格可以消除错误,尽管根据我的经验,最好是从等式中删除公式(没有双关语)

    建议修复 在
    邮件>应用程序脚本>工作表>公式>工作表的链中

    将其更改为
    Mail>Apps Script>Sheet>Apps Script>Sheet

    我没有要测试的源数据,但要在应用程序中实现查询,脚本如下所示:

    const ss=SpreadsheetApp.openById(“您的ID”);
    const dataRange=ss.getSheetByName(“Sheet1”).getRange(“A2:G”);
    const data=dataRange.getValues()
    常量filteredData=data.filter(行=>行[1]!==“”)
    
    一旦数据与脚本一起导入,就可以使用公式对数据进行排序



    TLDR:链接
    IMPORTRANGE
    有时可能有效,但它似乎不太可靠。在我看来,现在最好将所有内容都转移到应用程序脚本中。

    非常感谢@iansedano!我很想给你积极的反馈,但由于我最近才进入这个平台,所以目前无法给你反馈。我将来会给你的。改变进口范围实际上是可行的,但正如你所说的,似乎不那么可靠。我将尝试更改应用程序脚本中的公式。没关系@JCVLC,如果您愿意,您仍然可以通过按✓ 我的答案旁边的按钮。如果你有兴趣,也可以去看看
    function sending_emails(){
      var ss=SpreadsheetApp.openById("1OpF8gcrV1Yj8bYP1j5PsHM4VRw2pKZOUmJf6VxGeFdY");
      var today = new Date();
      
      
      if(today.getDay() != 6 && today.getDay() != 0){      
    
    
      //Sending emails to reps:
    
      var data_sheet = ss.getSheetByName("Copy of sending_emails");
      var aux = data_sheet.getRange("B3:B").getValues();
      
      var startRow = 3; // First row of data to process
      var numRows = aux.filter(String).length;
      Logger.log('numRows' + numRows); 
      // Fetch the range of cells 
      var dataRange = data_sheet.getRange(startRow, 1, numRows, 5); //I get the error here because startRow = 3 and I get numRows = 0
      // Fetch values for each row in the Range.
      var data = dataRange.getValues();
    
    
      for (var a in data) {
        var row = data[a];
        var message = row[3]; 
        var emailAddress = row[0];
        Logger.log('emailAddress'+ emailAddress);
    
        MailApp.sendEmail({
          to: emailAddress, 
          subject: 'Task Manager', 
          htmlBody: message,
          cc: row[4]
    
        });
      }
    }
    }