Javascript 按每个单元格的字数从最大到最小对列进行排序
我需要根据每个单元格的字数对列范围进行排序,从每个单元格的最多字数到每个单元格的最少字数 范例Javascript 按每个单元格的字数从最大到最小对列进行排序,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我需要根据每个单元格的字数对列范围进行排序,从每个单元格的最多字数到每个单元格的最少字数 范例 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 l
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脚本,而不是公式
提前感谢您的帮助您希望使用与类范围内的
排序(sortSpecObj)
方法相同的规范实现特殊排序。例如,当“3”(列C)和“A2:D”作为列和范围给出时,输入和输出如下
输入:
输出:
如果我的理解是正确的,那么这个答案呢?脚本的流程如下所示
var sortColumn=“3”//C列
var sortRange=“A2:D”;
var ss=SpreadsheetApp.getActiveSheet();
var values=ss.getRange(sortRange.getValues();
var sorted=values.map(函数(e){returne e[sortColumn-1]}).filter(字符串);
var sortCol=sorted.slice().map(函数(e){return[e]});
sorted.sort(函数(a,b){返回b.length-a.length | | a.localeCompare(b)});//这是你的剧本。
var index=sorted.map(函数(e){
对于(var j=0;j
注:
- 使用此示例脚本时,首先请设置
和sortColumn
sortRange
- 请为您的环境修改此脚本
- 如果要排序的列有一些空单元格,请修改
tovar sorted=values.map(函数(e){return e[sortColumn-1]}).filter(字符串)
var sorted=values.map(函数(e){returne e[sortColumn-1]})代码>
我担心我会误解你的意思。如果这不是你想要的,请告诉我。我想对此进行修改。您希望使用与类范围内的
排序(sortSpecObj)
方法相同的规范实现特殊排序。例如,当“3”(列C)和“A2:D”作为列和范围给出时,输入和输出如下
输入:
输出:
如果我的理解是正确的,那么这个答案呢?脚本的流程如下所示
var sortColumn=“3”//C列
var sortRange=“A2:D”;
var ss=SpreadsheetApp.getActiveSheet();
var values=ss.getRange(sortRange.getValues();
var sorted=values.map(函数(e){returne e[sortColumn-1]}).filter(字符串);
var sortCol=sorted.slice().map(函数(e){return[e]});
sorted.sort(函数(a,b){返回b.length-a.length | | a.localeCompare(b)});//这是你的剧本。
var index=sorted.map(函数(e){
对于(var j=0;j
注:
- 使用此示例脚本时,首先请设置
和sortColumn
sortRange
- 请为您的环境修改此脚本
- 如果要排序的列有一些空单元格,请修改
tovar sorted=values.map(函数(e){return e[sortColumn-1]}).filter(字符串)
var sorted=values.map(函数(e){returne e[sortColumn-1]})代码>
我担心我会误解你的意思。如果这不是你想要的,请告诉我。我想对此进行修改。除了列之外,您似乎无法对工作表进行任何排序。一个简单的解决方案是添加另一列,其中包含单词计数和排序 描述了一种简单的字数计数: 如果需要脚本,则可以使用range.getValues()从电子表格中读取值,对javascript中获得的二维数组进行排序,然后将排序后的值写回相同的范围:
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);
// read the Sheet values into a javascript array
var values = r.getValues();
var sortedValues = values.sort(wordCountCompare);
// write the sorted values back into the Sheet range
r.setValues(sortedValues);
}
javascript排序函数非常乐意对二维数组进行排序,您只需传递一个适当的比较函数,它就可以计算出顺序:
function wordCountCompare(a, b) {
// Sort on column G - in javascript this is array element 6
// make sure the value is a string (toString)
// split the string using a space
// get the length of the split array which is the wordCount
var wordCountA = a[6].toString().split(" ").length;
var wordCountB = b[6].toString().split(" ").length;
return wordCountB - wordCountA;
}
注:
此字数仅为近似值,并使用空格标识单词。如果你知道标点符号,你可以做得更好。除了列之外,你似乎无法对工作表进行任何排序。一个简单的解决方案是添加另一列,其中包含单词计数和排序 描述了一种简单的字数计数: 如果需要脚本,则可以使用range.getValues()从电子表格中读取值,对javascript中获得的二维数组进行排序,然后将排序后的值写回相同的范围:
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);
// read the Sheet values into a javascript array
var values = r.getValues();
var sortedValues = values.sort(wordCountCompare);
// write the sorted values back into the Sheet range
r.setValues(sortedValues);
}
javascript排序函数非常乐意对二维数组进行排序,您只需传递一个适当的比较函数,它就可以进行排序
function wordCountCompare(a, b) {
// Sort on column G - in javascript this is array element 6
// make sure the value is a string (toString)
// split the string using a space
// get the length of the split array which is the wordCount
var wordCountA = a[6].toString().split(" ").length;
var wordCountB = b[6].toString().split(" ").length;
return wordCountB - wordCountA;
}