首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google Apps脚本-基于for循环匹配to value = "Yes“移动数据范围

Google Apps脚本-基于for循环匹配to value = "Yes“移动数据范围
EN

Stack Overflow用户
提问于 2018-10-16 16:58:19
回答 1查看 425关注 0票数 0

我正在尝试使用for循环在数据表中查找特定值,并根据该值是否= "Yes“将该行移动到另一个工作表。循环应进一步查找requesttype的值(在本例中为SRM、CC或TM1),并仅将行的某些部分移动到另一个工作表。

因此,for循环应该基于数据表中两个不同列的输入复制行:"All Outputs“

因此,虽然我的代码在运行时通常可以正常工作,但它似乎只对输入了“Yes”的一半行执行函数。

每次我运行脚本时,应该移动的行的一半会被移动,但另一半会留在原始表中。我可以运行代码,直到只剩下一行,在这种情况下,什么也不会发生。

这就是我所拥有的:

代码语言:javascript
复制
function myonEdit2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveCell();

  var sheetNameToWatch = "Open Requests";
  var columnNumberToWatch = 38;
  var watchColumn = 2;
  var valueToWatch = "Yes";

  var datarange = sheet.getRange(9, 2, 900, 36).getValues();
  var sheetNameToMoveTheRowTo = "Closed Requests" 

  for (i = 0; i < datarange.length -1; i++) {
    if (datarange[i][35] == "Yes") {
      var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
      if (datarange[i][0] == "SRM") {
        var targetRange3 = targetSheet.getRange(targetSheet.getLastRow() + 1, 2);
        sheet.getRange(i, 2, 1, 8).moveTo(targetRange3);
        sheet.deleteRow(rowstart + i);
      }     
      else if (datarange[i][0] == "GC") { 
        var targetRange3 = targetSheet.getRange(targetSheet.getLastRow() + 1, 2);
        sheet.getRange(i, 2, 1, 8).moveTo(targetRange3);
        sheet.deleteRow(i);
      }
      else if (datarange[i][0] == "TM1") { 
        var targetRange4 = targetSheet.getRange(targetSheet.getLastRow() + 1, 2, 1, 6);
        sheet.getRange(i, 2, 1, 6).moveTo(targetRange4);
        var targetRange5 = targetSheet.getRange(targetSheet.getLastRow(), 10, 1, 1)
        sheet.getRange(i, 13, 1, 1).copyTo(targetRange5)
        sheet.deleteRow(i);
      }
    }
  }

正如我所说的,代码工作得很好,但是它并不能执行它应该执行的所有行。

从上面可以看到,我将for循环范围定义为表所在的完整数据表。然后,我创建第一个(主) if条件,即数据范围的第36列为"Yes“。这应该定义将为哪些行执行脚本。

第二个if条件定义应该复制行的确切列,并取决于第一列是= SRM、CC还是TM1。

如果有人能帮我弄清楚为什么代码不能对所有行执行,那就太好了。

Example sheet

EN

回答 1

Stack Overflow用户

发布于 2018-10-16 18:38:54

类似的问题也发生在我身上,这似乎也是这里的问题。您正在获取数据范围,并向其添加一个for循环来处理每一行。现在,您正在删除中间的行,但是有一个已定义的数据数组,您已经在其中添加了for循环。因此,当前面的行将被删除时,for循环数组结构将保持不变,但工作表结构将发生变化。例如,假设第二行被删除,并且您的条件在i=5中匹配,但是工作表结构现在将第5行向上移动。

因此,您可以尝试添加要保留在数组中的行,并清除工作表一次,然后在完成复制工作表数据的处理后将该数组一次性添加到工作表中,或尝试在完成处理后从工作表中移除已删除的行以移动到另一个工作表

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52831664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档