【问题标题】:Adding Array from Variable on Google Sheets - Google Apps Script从 Google 表格上的变量添加数组 - Google Apps 脚本
【发布时间】:2020-05-28 22:12:06
【问题描述】:

我有一个看起来像的现有代码,

var copyPageNumbers = [5, 7, 9];

我在我的谷歌表格的一列中有相同的数字 5、7、9,并设置了一个变量来获取值,

var credentials = ss.getRange(i, 11).getValue(); // The value of this is 5, 7, 9

基于上述变量。我想使用在copyPageNumbers 变量中使用credentials 变量的代码看起来像这样,

var copyPageNumbers = [credentials];

例如,下面的代码块可以工作,

  var credentials = ss.getRange(i, 11).getValue();
  var copyPageNumbers = [2, 4];

  var offset = 1;

  var slides = otherPresentation.getSlides();
  var page = 0;
  slides.forEach(function(slide, i) {
    if (copyPageNumbers.indexOf(i + 1) != -1) {
      currentPresentation.insertSlide(offset + page, slide);
      page++;
    }
  });

但是,当我尝试以下两种方法时 - 它不起作用,

  var credentials = ss.getRange(i, 11).getValue().split(", ");
  var copyPageNumbers = credentials
  var offset = 1;
  var slides = otherPresentation.getSlides();
  var page = 0;
  slides.forEach(function(slide, i) {
    if (copyPageNumbers.indexOf(i + 1) != -1) {
      currentPresentation.insertSlide(offset + page, slide);
      page++;
    }
  });
  var credentials = ss.getRange(i, 11).getValue();
  var offset = 1;
  var copyPageNumbers = []
  copyPageNumbers.push(credentials);
  var slides = otherPresentation.getSlides();
  var page = 0;
  slides.forEach(function(slide, i) {
    if (copyPageNumbers.indexOf(i + 1) != -1) {
      currentPresentation.insertSlide(offset + page, slide);
      page++;
    }
  });

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    var credentials = ss.getRange(i, 11).getValue(); 返回 字符串 "5, 7, 9",但您需要将其作为数组。

    假设格式一致(即[数字][逗号][空格]),可以使用split()将其转为数组。

    var credentials = ss.getRange(i, 11).getValue().split(", "); // [5, 7, 9]
    var copyPageNumbers = credentials;
    

    【讨论】:

    • 感谢@Diego,但是此方法不适用于我的脚本。请查看对问题所做的修改。
    • @MohammedMishal Logger.log(ss.getRange(i, 11).getValue())Logger.log(ss.getRange(i, 11).getValue().split(", ")) 的输出是什么?
    • 这里是输出 [20-02-14 20:08:37:151 GST] 3, 4[20-02-14 20:08:37:248 GST] [3, 4] 尽管它的输出看起来像是一个数组,但与我硬键时相比,包含幻灯片 3 和 4 的脚本似乎不起作用脚本中的数字 3 和 4。
    【解决方案2】:
    var copyPageNumbers = [];
    var credentials = ss.getRange(i, 11).getValue();
    copyPageNumbers.push(credentials);
    

    你想要一个数组 ([5,7,9]),'credentials' 是一个字符串 (5,7,9)。使用 (javascript) push() 方法将字符串添加到数组“copyPageNumbers”中。如果我理解得很好。

    【讨论】:

    • OP(?) 想要(我认为)一个数组,“凭据”是一个字符串,而不是一个数组。使用 (javascript) push() 方法将字符串添加到数组“copyPageNumbers”中。如果我理解得很好。
    • 感谢@timmer,但是这种方法不适用于我的脚本。请查看对问题所做的修改。
    • @MohammedMishal (1) 在“我的”答案中 var credentials = ss.getRange(i, 11).getValue(); (2) if 中的 '!=' 不应该是 '!==' 吗?
    • @Timmer我已经做到了,与我硬编码数组中的数字相比,它仍然不起作用。如果您能分享任何替代方法,将不胜感激
    • @MohammedMishal >> 也许它不起作用,因为'我们的'答案中缺少'offset = 1'
    【解决方案3】:

    感谢以上答案,感谢Pattern 2,我已经设法解决了这个问题。

    请参阅下面的更新脚本。它之前不起作用的原因是因为循环幻灯片的 For each 循环以及数字和数组不起作用。

      var credentials = ss.getRange(i, 11).getValue().split(", ");
    
      var offset = 0;
    
      var slides_stack = otherPresentation.getSlides();
      var page = 0;
    
        credentials.forEach(function(p, i) {
        currentPresentation.insertSlide(offset + i, slides_stack[p - 1]);
      });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-16
      • 2015-06-25
      • 2015-07-10
      • 2022-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多