gpt4 book ai didi

javascript - 按每个单元格的单词数从最多到最少的 Google 脚本对列进行排序

转载 作者:行者123 更新时间:2023-12-01 01:54:11 26 4
gpt4 key购买 nike

我需要根据每个单元格的单词数对列范围进行排序,从每个单元格最多的单词数到每个单元格最少的单词数

示例

ahtn bmm cnst
Abb Baa
HHH
cc
a
b
c

我可以对列进行排序

function sortColumn() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName("Sheet1");
var lastCol = s.getLastColumn();
var lastRow = s.getLastRow();

// assumes headers in row 1
var r = s.getRange(2, 1, lastRow - 1, lastCol);

// Sort on column G = 7
r.sort([{ column: 7, ascending: true }]);

}

我可以根据需要对数组进行排序

function highLow(a,b){
return b.length - a.length || // sort by length, if equal then
a.localeCompare(b); // sort by dictionary order
}

这给出了

[HHH,Abb Baa,cc,ahtn bmm cnst,b,c,a].sort(highLow) =  [ahtn bmm cnst,Abb Baa,HHH,cc,a,b,c]

但是我不知道如何以 Google 脚本(而不是公式)的方式对列范围进行排序

预先感谢您的帮助

最佳答案

您想使用与 sort(sortSpecObj) 方法相同的规范来实现您的特殊排序在类别范围内。例如,当“3”(C 列)和“A2:D”作为列和范围给出时,输入和输出如下。

输入 :

enter image description here

输出 :

enter image description here

如果我的理解是正确的,这个答案怎么样?脚本流程如下。

  1. 检索输入范围的值。
  2. 从检索到的值中检索输入列的值。
  3. 使用您的脚本对列进行排序。
  4. 检索已排序列的索引。
  5. 使用索引重新排列已排序范围的值。
  6. 将结果值放入工作表中。

示例脚本:

var sortColumn = "3"; // Column C
var sortRange = "A2:D";

var ss = SpreadsheetApp.getActiveSheet();
var values = ss.getRange(sortRange).getValues();
var sorted = values.map(function(e){return e[sortColumn - 1]}).filter(String);
var sortCol = sorted.slice().map(function(e){return [e]});
sorted.sort(function (a,b){return b.length - a.length || a.localeCompare(b)}); // This is your script.
var index = sorted.map(function(e){
for (var j = 0; j < sortCol.length; j++) {
if (e == sortCol[j][0] && !sortCol[j][1]) {
sortCol[j].push("temp");
return j;
}
}
});
var newValues = index.map(function(e){return values[e]});
values.splice(0, sorted.length);
Array.prototype.push.apply(newValues, values);
ss.getRange(sortRange).setValues(newValues);

注意:

  • 当您使用此示例脚本时,首先请设置sortColumnsortRange .
  • 请根据您的环境修改此脚本。
  • 如果您要排序的列中有一些空单元格,请修改var sorted = values.map(function(e){return e[sortColumn - 1]}).filter(String);var sorted = values.map(function(e){return e[sortColumn - 1]}); .

引用文献:

我担心我可能会误解你的意思。如果这不是您想要的,请告诉我。我想修改一下。

关于javascript - 按每个单元格的单词数从最多到最少的 Google 脚本对列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51164501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com