假设我希望Google表格自动对某些数据进行排序,例如C列。

我该怎么做?

我知道我可以手动对数据进行排序单击并选择“排序数据”,但这不是我想要的。

#1 楼

您可以使用sort()函数,但必须将数据放在一个位置,并将数据的自动排序副本放在另一个位置。例如,说我的数据中有Sheet1 :

   | A    | B    | C
=====================
 1 | This | this | 2
 2 | Is   | is   | 1
 3 | Test | test | 3


然后在Sheet2的A1单元格中放置以下函数:


= sort(Sheet1!A: C,3,TRUE)


这将显示我的数据,但按C列(第三列)升序排列。

   | A    | B    | C
=====================
 1 | Is   | is   | 1
 2 | This | this | 2
 3 | Test | test | 3


评论


参数必须用分号分隔;例如= sort(Sheet1!A:C; 3; TRUE)

–user17634
2012年2月25日在12:20



@Petr用逗号对我来说很好用。

–威廉·杰克逊
2012-2-27在2:47

@ user17634:这取决于您的区域设置。

– Vidar S. Ramdal
13年11月12日13:35

#2 楼

也可以使用Google Apps脚本实现数据的自动就地排序。

这可能更难以实现且更容易出错(我仍然会使用William Jackson的解决方案,+ 1 BTW),但我认为这很有趣,可以显示。

我有一个工作表,如下所示:



我使用以下步骤添加了新脚本:


在菜单中,转到“工具”->“脚本编辑器” ...

选择“创建新项目”


在出现的空代码窗口中,粘贴以下代码,该代码将在编辑单元格时自动运行:

function onEdit(event){
  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 4;
  var tableRange = "B3:E9";

  if(editedCell.getColumn() == columnToSortBy){   
    var range = sheet.getRange(tableRange);
    range.sort( { column : columnToSortBy } );
  }
}


回到工作表并开始使用这些值,以查看表格每次自动排序的情况

注意:

在上面的脚本中,


4代表D列的索引(Value列-将要排序的on)
"B3:E9"代表th表范围(不包括标题行)

您的表很可能与我的表不同,因此应相应调整这些值。

评论


我尝试了您的[edited]函数onEdit(event){var sheet = event.source.getActiveSheet(); var editedCell = sheet.getActiveCell(); var columnToSortBy = 4; var tableRange =“ A2:F99”; if(editedCell.getColumn()== columnToSortBy){var range = sheet.getRange(tableRange); range.sort({column:columnToSortBy});但是不断出现错误:TypeError:无法从未定义中读取属性“ source”。 (第2行),它是以下代码:var sheet = event.source.getActiveSheet();有任何想法吗? NM,仅从脚本页面运行时会收到错误,但在实际的扩展界面上可以正常工作

–drizzt09
2012年5月3日14:00



但是不断出现错误:TypeError:无法从未定义中读取属性“ source”。 (第2行),它是以下代码:var sheet = event.source.getActiveSheet();有任何想法吗? NM,仅在从脚本页面运行时会收到错误,但在实际电子表格上可以正常运行。现在问题...将其排序为A-Z,如何将其更改为自动对Z-A进行排序?谢谢

–drizzt09
2012年5月3日14:00



@ drizzt09调用该方法时,您可能会为事件参数指定null,否则在触发实际事件时Google Spreadsheet基础结构会正确填充该参数。

–克里斯蒂安·卢帕斯库(Cristian Lupascu)
2012年5月3日15:52

@ drizzt09更改排序顺序,如下更改range.sort行:range.sort({column:columnToSortBy,ascending:false}); 。有关更多排序选项,请参阅developers.google.com/apps-script/class_range#sort

–克里斯蒂安·卢帕斯库(Cristian Lupascu)
2012年5月3日15:54



@ w0lf谢谢您的完美工作。现在,我想添加到其中或具有单独的功能,该功能执行完全相同的功能,但处于打开或刷新状态。因此,当我打开/刷新excel工作表时,它将自动对第4列进行排序,降序与使用当前代码编辑第4列中的代码时相同。谢谢

–user19738
2012年5月4日18:34

#3 楼

没有脚本的另一种选择是:

=QUERY(A1:C3,"SELECT * ORDER BY C")  


范围受到限制(A1:C3),因为顺序升序的地方将首先出现空白条目。

评论


您能告诉我该放在哪里吗?

–路易·崔(Louis Tran)
17年8月27日在5:32

您可以使用SELECT * WHERE C <>''ORDER BY C来忽略空白条目,然后可以使用足够大的范围来包含所有当前和将来的行。

–古斯
17/12/27在11:39

#4 楼

这是一个通用脚本,它将基于第一列自动排序,并假定有一个标题行。

创建脚本:


在菜单中,转到工具->脚本编辑器...

在空的代码窗口中粘贴以下代码,该代码将在编辑单元格时自动运行:

 // LinkBack to this script:
 // http://webapps.stackexchange.com/questions/7211/how-can-i-make-some-data-on-a-google-spreadsheet-auto-sorting/43036#43036

 /**
 * Automatically sorts the 1st column (not the header row) Ascending.
 */
function onEdit(event){
  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 1;
  var tableRange = "A2:T99"; // What to sort.

  if(editedCell.getColumn() == columnToSortBy){   
    var range = sheet.getRange(tableRange);
    range.sort( { column : columnToSortBy, ascending: true } );
  }
}


评论


我发现我必须var sheet = SpreadsheetApp.getActiveSpreadsheet();而不是这里。

– dldnh
13年7月23日在16:15

这很好用,但是我该如何编辑它,使其仅在doc中的单个工作表上排序?

– moobot
15年5月28日在10:49

似乎不起作用

–shadowz1337
19年2月19日,在2:22

#5 楼

使用脚本解决方案,但要对多个列进行排序

我想按下拉菜单列然后按日期进行排序。

为此,请修改Cristian或geekspotz的代码段的“ range.sort”行,如下所示:
// Sorts descending by edited column, then ascending by column 1 
// Note the use of an array
range.sort([{column: columnToSortBy, ascending: false}, {column: 1, ascending: true}]);


区别在于添加了

从Serge的Stack Overflow提取排序代码修改答案在这里:
在图纸上自动排序

#6 楼

在这里,我创建了一个自动排序脚本和电子表格(需要在工作表上做一些工作,复制代码并设置范围。
它基于多个stackexchange答案

https ://docs.google.com/spreadsheets/d/1LDohwCuy8HZg4YCQEOuWmgpY_WG2BVh_aH-i4JGM5BE/edit#gid=0

它会记录并获取您最近一次关注的范围值,并将其与现在的值进行比较实际编辑后,如果有不同,则对表进行排序。

#7 楼

因此,Google表格具有过滤器,不需要您在文档中制作新表格。

文档:https://support.google.com/docs/answer/3540681

#8 楼

可以使用Google App脚本来完成。每当工作表数据发生更改时,脚本将自动排序。

在您的Google表格上:
选择工具–>脚本编辑器,然后粘贴以下脚本并保存。 。

SHEET_NAME = "Sheet1";
SORT_DATA_RANGE = "A1:C999";
SORT_ORDER = [
{column: 3, ascending: false},  // 3 = column number, sorting by descending order
{column: 1, ascending: true}, // 1 = column number, sort by ascending order 
{column: 2, ascending: true}
];

function onEdit(e){
  multiSortColumns();
}
function multiSortColumns(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(SHEET_NAME);
  var range = sheet.getRange(SORT_DATA_RANGE);
  range.sort(SORT_ORDER);
  ss.toast('Sort complete.');
}



来源:https://www.idiotinside.com/2018/06/08/sort-multiple-columns-google-sheets-apps-script/