用循环替换硬编码的连续单元

时间:2018-04-17 20:34:49

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

此任务涉及Google表格和我撰写的Google Apps脚本。

有一项任务:我们有一个由1个colomn和3个行组成的表。每行(也是一个单元格)包含以下类型的记录" 4d 1a 3c 5e 2b",其中每个字母可以由一个单词替换。在每一行(单元格)中,表达式可以重复也可以不重复" 4d 1a 3c 5e 2b"表达式,数字的分布是随机的。

我需要做以下事情 - 将每个细胞分成" 4d 1a 3c 5e 2b"将表达式键入5个单独的单元格,按升序排序。

一方面,我解决了这个问题。首先,我创建了一个变量,并将单元格中的表达式指定为值。然后我通过.split(" ")方法创建了一个数组,并按.sort()方法对数组中的项进行了排序。因此,我设法为几个单元格设置值,即排序数组的项目。

以下是代码:

function mySort() {
  var dt = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("myPage").getRange("F3").getValue();
  var arr = dt.split(" ");
  a = arr.sort();
  var first = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("myPage").getRange("H3").setValue(arr[0]);
  var second = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("myPage").getRange("I3").setValue(arr[1]);
  var third =SpreadsheetApp.getActiveSpreadsheet().getSheetByName("myPage").getRange("J3").setValue(arr[2]);

  var ddt = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("myPage").getRange("F4").getValue();
  var arr2 = ddt.split(" ");
  aa = arr2.sort();
  var first2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("myPage").getRange("H4").setValue(arr2[0]);
  var second2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("myPage").getRange("I4").setValue(arr2[1]);
  var third2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("myPage").getRange("J4").setValue(arr2[2]);

  var dddt = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("myPage").getRange("F5").getValue();
  var arr3 = dddt.split(" ");
  aa = arr3.sort();
  var first3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("myPage").getRange("H5").setValue(arr3[0]);
  var second3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("myPage").getRange("I5").setValue(arr3[1]);
  var third3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("myPage").getRange("J5").setValue(arr3[2]);
}

正如您所看到的,一切正常:当我按下分配了mySort()功能的按钮时,我得到了一个合适的结果。但是,我想做更多。如果我可以根据需要选择尽可能多的行,然后按下按钮,看看循环如何遍历所有行,拆分它们,对它们进行排序,并将每个已排序数组的元素分配给旁边的单元格,那将会很棒。初始细胞。为了更清楚,最终结果必须如下所示:

" 4d 1a 3c 5e 2b" ///" 1a" "图2b" "图3c" "图4d" "图5e"

" 1g 5i 2g 4f 3h" ///" 1g" "2克" " 3H" " 4F" " 5I"

" 5n 3m 1l 4k 2o" ///" 1l" " 1-20" "3米" " 4K" " 5N"

那么,我怎样才能在Google表格中使用循环来完成这样的事情而不输入我想要查看排序数组项目的确切单元格?

1 个答案:

答案 0 :(得分:0)

我认为这会为你做到。

function yourSort(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('myPage');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  for(var i=2;i<vA.values();i++){
    var A=String(vA[i][5]).split(" ").sort();
    vA[i][7]=A[0];
    vA[i][8]=A[1];
    vA[i][9]=A[2];
  }
  rg.setValues(vA);
}

只要每列都有标题,每行都有一些数据,那么我认为getDataRange()对你有效。

相关问题