在新的谷歌电子表格中有没有可靠的ImportRange()替代品?

时间:2014-12-07 21:38:31

标签: google-apps-script google-sheets

我在新的Google工作表中使用了大约20张不同工作表的importrange()。 一段时间后,公式会刹车,并显示"错误:正在加载数据...",在我更改参数中的任何内容之前它都不会工作,即更改" Sheet1!a3 :AG"到" Sheet1!a3:AG",然后它可以工作几天,然后再次以相同的错误制动。

我已尝试myImportrange自定义功能,例如Using the myImportRange custom spreadsheet function - TypeError: Cannot call method "split" of undefined 但最终收到了同样的错误。

3 个答案:

答案 0 :(得分:1)

我已经改善了它的意义:

  using (SqlConnection con = new SqlConnection(YourConnectionString)) {
    con.Open();

    using (SqlCommand q = con.CreateCommand()) {
      q.CommandText = String.Format(
        @"select {0}
            from MyTable -- put actual table name here
           where PizzaType = @prmPizzaType", "Price2");

      q.Parameters.AddWithValue("@prmPizzaType", "Hawaiian");

      using (var reader = q.ExecuteReader()) {
        if (reader.Read()) {
          // you may want to check if value is NULL: reader.IsDBNull(0)
          Decimal value = Convert.ToDecimal(reader[0]);

          if (reader.Read()) {
            //TODO: At least 2 values: put your code here
          }
        }
        else {
          //TODO: no such value: put your code here
        }
      }
    }
  }

答案 1 :(得分:1)

这是一个老问题,但由于它仍然是 Google 上的热门搜索结果,因此这里有一些提示。

工作表中过多的 IMPORTRANGE() 函数会导致它运行缓慢,并且可能会出现您所描述的错误。硬性限制是 50 个跨工作簿引用公式,但如果您要导入大量单元格,您可能会在此之前陷入困境。要解决此问题,您可以设置一个电子表格,将来自多个来源的数据导入到一张用作数据中心的工作表中,然后将该范围导入到您的最终电子表格中。它使跟踪问题有点困难,但减少了 IMPORTRANGE() 函数的数量。也要对组织进行一些深思熟虑,以便以后更轻松地进行更改,例如在导入范围之间保留额外的列和行。

我也尝试过 Preactive 的代码,它运行良好有一段时间。我将其设置为 5 分钟触发器,并将其设置为替换 10 个访问不同电子表格的 IMPORTRANGE() 函数。然而,我遇到的一个看似无关的问题是我的 Google 表单会间歇性地停止将数据推送到其链接的电子表格,即使表单仍在接收响应。大约每周一次,这会发生在 1-2 种不同的表格中。表单数据将在 12-24 小时后回填。我不知道每 5 分钟运行一次的代码是否超出了我的每日运行时间限制或导致了其他一些问题,但代码本身从未出现任何错误。我删除了触发器并切换回 IMPORTRANGE() 公式,此后我对表单没有任何问题。

使用 Gscript 解决方法可能适用于每天只需要更新几次或按需更新的工作表,但对于需要更连续更新的数据,IMPORTRANGE() 是目前的最佳选择。< /p>

答案 2 :(得分:0)

&#13;
&#13;
function UpdateRange() {
var values = SpreadsheetApp.openById('Key').
  getSheetByName('Sheet1').getRange('A3:G').getValues();
SpreadsheetApp.getActive().getSheetByName('data').
  getRange(1,1,values.length,values[0].length).setValues(values);
}
&#13;
&#13;
&#13;

然后你可以为这个功能添加定时器