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



这个任务涉及谷歌表格和我写的谷歌应用脚本。

有一个任务:我们有一个由 1 列和 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 2g4f 3h"///"1g" "2g" "3h" "4f" "5i">

"5n 3m 1l 4k 2o"///"1l" "2o" "3m" "4k" "5n">

那么,如何在Google表格中使用循环,而无需键入我想在其中查看排序数组项目的确切单元格即可执行此类操作?

我认为这会为您完成。

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()会为你工作。

最新更新