更改同一电子表格中不同工作表上的信息

时间:2020-10-16 10:47:39

标签: google-apps-script google-sheets

在同一电子表格的不同工作表上,我有两个大小相等的范围。我试图在第一张纸中找到一行(基于用户输入),然后使用该索引来修改第二张纸中的表,该表计算该索引之前已被使用了多少次(以制作出美观的饼图)图表)。

此代码运行,但不会在第二张纸上产生结果。我已经完成了调试过程,而我最好的猜测是由于某种原因,我的for in循环未通过。随附的代码包含了前面提到的索引,并试图实现目标的后半部分。

function acceptToEncounterChart(ghostrow) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  SpreadsheetApp.setActiveSheet(ss.getSheets()[1]);
  ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Average Encounter Chart");
  var range = sheet.getRange("B3:B14")
  
  for(var i in range) {
    if(ghostrow == i) {
      var before = range[i][0].getValue()
      range[i][0].setValue(before + 1);
    } 
  }
  SpreadsheetApp.setActiveSheet(ss.getSheets()[0]);
};

1 个答案:

答案 0 :(得分:1)

说明:

我不确定您的目标是什么。

但是,从头开始有一些修复/改进

  • 您定义的变量ss的2倍具有完全相同的值。

  • 如果您的目标只是获取工作表,则无需设置活动工作表,因此此行是多余的:

    SpreadsheetApp.setActiveSheet(ss.getSheets()[1]);

  • 变量range 不是数组,而是range对象。您无法为其建立索引,因此您也不能也使用for循环迭代单个对象。出于相同的确切原因,如果if语句中的代码错误,则不能索引range。但是您不会看到任何错误,因为if语句的计算结果为false

  • 在JavaScript和许多其他编程语言中,数组索引从0开始。由于您的范围从单元格B3或行3开始,因此您需要使用i+3将数据与范围匹配。

  • 出于与上一点相同的原因,ghostrow索引,而不是if语句将数组索引ighostrow进行比较,因此不应将ghostrow与实际的工作表行混淆。例如,如果您选择ghostrow=5,则当前脚本将使单元格B8(记住i+3)的值增加1。


解决方案:

以下是可行的代码段:

function acceptToEncounterChart(ghostrow) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Average Encounter Chart");
  var data = sheet.getRange("B3:B14").getValues().flat();
  
  data.forEach((v,i)=>{
   if(ghostrow == i){
    sheet.getRange(i+3,2).setValue(v+1)
  }              
  });
 ss.setActiveSheet(ss.getSheets()[0]);
}

相关:

请浏览official google apps script documentation

相关问题