Google apps script 对分组的行范围进行排序-谷歌工作表
示例表: 我有一个相当小的数据集,我经常进行排序,为了避免每次手动排序,我在应用程序脚本中创建了一个基本的排序,它可以正常工作,但还远远不够理想。我希望有一个更直接的排序方法,而不需要谷歌公式的任何输入 数据如(左)所示,一旦排序为(右): 到目前为止,我使用的应用程序脚本如下所示:Google apps script 对分组的行范围进行排序-谷歌工作表,google-apps-script,google-sheets,Google Apps Script,Google Sheets,示例表: 我有一个相当小的数据集,我经常进行排序,为了避免每次手动排序,我在应用程序脚本中创建了一个基本的排序,它可以正常工作,但还远远不够理想。我希望有一个更直接的排序方法,而不需要谷歌公式的任何输入 数据如(左)所示,一旦排序为(右): 到目前为止,我使用的应用程序脚本如下所示: function sortSheet() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName
function sortSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Sheet1');
var data = ss.getSheetByName('Data');
var lA = data.getRange('B2').getValue(); //Retuns the row for the first occurance of this value. Via.(=MATCH($A2,'Sheet1'!$A:$A,0)) Where Match(Value,Range to check) on the 'data' sheet.
var nA = data.getRange('C2').getValue(); //Returns the total number of these values. Via. (=COUNTIF('Sheet1'!$A:$A,$A2)) Where CountIF(Range to check,Value) on the 'data' sheet.
var sortA = sheet.getRange('A'+lA+':Y'+(lA+nA)); //Selects the range that contains the values to be sorted. Via. A through Y within the specified rows.
sortA.sort({column: 2, ascending: true}) //Sorts range by column 2.
var lB = data.getRange('B3').getValue();
var nB = data.getRange('C3').getValue();
var sortB = sheet.getRange('A'+lB+':Y'+(lB+nB));
sortB.sort({column: 2, ascending: true})
var lC = data.getRange('B4').getValue();
var nC = data.getRange('C4').getValue();
var sortC = sheet.getRange('A'+lC+':Y'+(lC+nC));
sortC.sort({column: 2, ascending: true})
}
此脚本依赖于工作表“数据”中给出的信息。
在该表中,第一行的给定键位于B列,该键的计数位于C列
然后,脚本获取所需的范围进行排序,并一次一个地运行它们。
是否有人能够帮助简化此操作或以更简单的方式进行此操作?您可以尝试在表格中收集每个ID的数据 您的工作表类似于
sheets=[“Sheet1”、“ID A”、“ID B”、“ID C”…]
然后:
sort
设置要升序排序的ID表Sheet1
中选择单元格,使其指向每个ID页通读SpreadsheetApp服务的类,有一些方法(如and或)可能会有所帮助。您可以使用常规公式来实现这一点,而无需使用应用程序脚本:
=查询(A:B,“按A,B的顺序选择A,B,其中A不为空,B不为空”,1)
结果是:
你可以看到它在工作
注意:这不会在每个ID“部分”之间保留空格。谢谢您的评论。我知道你是从哪里来的,但是这不是我想要的。ID的数量通常是固定的,但是ID的数量通常在增加。此范围内的一些数据是手动输入的,而其他数据是通过唯一代码从C列导入的。因此,由于数据量不断增加,将Sheet1点指向每个点将不起作用。