【问题标题】:Incorrect range height error in Google Sheets ScriptGoogle表格脚本中的范围高度错误不正确
【发布时间】:2019-07-02 02:03:21
【问题描述】:

对 JS 完全陌生。该代码查看 YouTube ID“A2”并提供视频标题和总观看次数。这适用于“A2”中列出的一个 ID,但我无法让它与一个范围一起使用。

我尝试调整范围并使用行列格式。

例如,将单元格扩展到第 7 行,如下所示,会出现此错误“范围高度不正确,为 1 但应为 6(第 7 行,文件“代码”)”

function getVideoInfo() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var vid = sheet.getRange("A2:A7").getValue();
  var data = YouTube.Videos.list('snippet, statistics', {id: vid});
  var item = data.items[0];
  var info = [item.snippet.title, item.statistics.viewCount];
  sheet.getRange("B2:C7").setValues([info]);
}

我也尝试将数据项调整为 [0] 以外的数字

【问题讨论】:

    标签: javascript google-apps-script google-sheets youtube-data-api


    【解决方案1】:
    • 您想从放入“A2:A7”的 ID 中检索 snippet.titlestatistics.viewCount 的值,并将结果放入“B2:C7”。
    • 当脚本用作var vid = sheet.getRange("A2").getValue()sheet.getRange("B2:C2").setValues([info])时,它工作正常。

    如果我的理解是正确的,那么这个修改呢?

    修改点:

    • sheet.getRange("A2:A7").getValue() 仅检索值“A2”。
    • 在当前脚本中,当sheet.getRange("B2:C7").setValues([info]) 运行时,它会尝试将1 行2 列的值放入6 行2 列的单元格中。这样,就会发生这样的错误。

    需要从单元格“A2:A7”中取值,并将6行2列的值放到“B2:C7”中。

    修改脚本:

    请按如下方式修改您的脚本。

    function getVideoInfo() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var vid = sheet.getRange("A2:A7").getValues();
      var info = vid.map(function(e) {
        var data = YouTube.Videos.list('snippet, statistics', {id: e});
        var item = data.items[0];
        return [item.snippet.title, item.statistics.viewCount];
      });
      sheet.getRange("B2:C7").setValues(info);
    }
    

    参考资料:

    如果我误解了您的问题,请告诉我。我想修改它。

    编辑1:

    如果我更改脚本以查看范围 A:A 中的所有单元格,并且在范围 A:A 中的单元格中没有值,我会收到以下错误。 TypeError: Cannot read property "snippet" from undefined. (line 7, file "Code")。我希望能够在 A:A 范围内有单元格并仍然运行脚本。

    关于your new question,当“A”列有空单元格时,要将空值放入“B”和“C”列。我是这样理解的。通过这个,我修改了我的脚本。

    修改脚本:

    function getVideoInfo() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var vid = sheet.getRange("A:A").getValues(); // Modified
      var info = vid.map(function(e) {
        if (e) { // Added
          var data = YouTube.Videos.list('snippet, statistics', {id: e});
          var item = data.items[0];
          return [item.snippet.title, item.statistics.viewCount];
        }
        return ["",""]; // Added
      });
      sheet.getRange("B:C").setValues(info); // Modified
    }
    

    编辑2:

    A2:A7 中有 ID 但A8 中没有 ID 时,我收到以下错误 TypeError: Cannot read property "snippet" from undefined. (line 8, file "Code")

    do not have a value in a cell in range A:A I get the following error.,我了解到“A”列中有几个空单元格。但是根据您的评论,认为问题在于单元格的值。所以当var data = YouTube.Videos.list('snippet, statistics', {id: e})出现错误时,我修改了脚本忽略了错误。

    修改脚本:

    function getVideoInfo() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var vid = sheet.getRange("A:A").getValues(); // Modified
      var info = vid.map(function(e) {
        if (e) {
          try { // Added
            var data = YouTube.Videos.list('snippet, statistics', {id: e});
            var item = data.items[0];
            return [item.snippet.title, item.statistics.viewCount];
          } catch(er) { // Added
            return ["",""];
          }
        }
        return ["",""];
      });
      sheet.getRange("B:C").setValues(info); // Modified
    }
    

    【讨论】:

    • 谢谢。那行得通!如果“A”中没有任何东西可以查找,有没有办法让它看起来更大的范围而不给出错误?例如 A2:A50 和 B2:C50?
    • @Bryan 感谢您的回复。我很高兴你的问题得到了解决。但我无法理解你的新问题。 A2:A50 and B2:C50 是什么?
    • 道歉。如果我更改脚本以查看A:A 范围内的所有单元格,并且A:A 范围内的单元格中没有值,我会收到以下错误。 TypeError: Cannot read property "snippet" from undefined. (line 7, file "Code")。我希望能够让A:A 范围内的单元格为空白,并且仍然可以运行脚本。
    • @Bryan 关于您的新问题,我添加了修改我的脚本的脚本。你能确认一下吗?
    • A2:A7 中有ID 但A8 中没有ID 时,我收到以下错误TypeError: Cannot read property "snippet" from undefined. (line 8, file "Code")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多