【问题标题】:Pass loop value along with a string将循环值与字符串一起传递
【发布时间】:2019-11-14 03:53:54
【问题描述】:

我想在同一个工作簿中的工作表之间移动,我的工作表名称就像“订单 1”、“订单 2”、“订单 3”............等等。我想从循环中获取值以及像“Order [i]”这样的“Order”字符串,并想粘贴一些公式,该公式也从循环中获取一些值,例如 ={Link!B[[i]+2]}

我尝试使用以下代码但无法成功。

function Order() {
  var spreadsheet = SpreadsheetApp.getActive();
  for (var i = 1; i <= 10; i++) {
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Order [i]'));
    spreadsheet.getRange('B3').activate();
    spreadsheet.getCurrentCell().setValue('={Link!B[[i]+2]}');;
  }  
};

【问题讨论】:

    标签: arrays loops google-apps-script google-sheets


    【解决方案1】:

    当您指定'Order [i]' 时,您的脚本会查找名为“Order [i]”的工作表。相反,你应该写'Order ' + i

    同样,'={Link!B[[i]+2]}' 将返回“={Link!B[[i]+2]}”,就像你写的一样。而是写'={Link!B' + (i+2) + '}'

    另外,您不需要.activate().setActiveSheet() 调用。您可以简单地获取范围,然后立即设置值。您已经使用.getSheetByName() 方法获得了工作表。事实上,您将所有这些链接在一起。

    function Order() {
      var spreadsheet = SpreadsheetApp.getActive();
      for (var i = 1; i <= 10; i++) {
        spreadsheet.getSheetByName('Order ' + i)
          .getRange('B3')
          .setValue('={Link!B' + (i+2) + '}');
      }  
    };
    

    【讨论】:

    • 谢谢!我已经从你的代码中改变了一些东西,它可以工作
    • @MubashirAli 太好了。你改变了什么?
    • function Order() { for (var i=1;i
    • @MubashirAli 感谢分享。正如我所提到的,您不需要那些激活调用,但只要它可以正常工作就可以了 :) 如果它对您有用,请考虑将答案标记为已接受。
    【解决方案2】:

    字符串'Order [i]' 将始终只是'Order [i]',因为所有内容都包含在引号中,因此计算机会按字面意思解释它。你想使用'Order ' + i 之类的东西,它将评估i 是什么,然后将其附加到'Order'

    在第二个示例中,您可能需要 '={Link!' + B[i+2] + '}' 之类的内容

    【讨论】:

    • 谢谢,我成功了。堆栈溢出社区的人很棒。我还在 Google 社区上发布了这个问题,但 2 天没有任何消息。
    猜你喜欢
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    相关资源
    最近更新 更多