如何在Google表格自动排序中制作一些数据?


57

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

我怎么做?

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

Answers:


51

您可以使用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)

2
@Petr用逗号对我来说很好用。
威廉·杰克逊

6
@ user17634:这取决于您的区域设置。
Vidar S. Ramdal

41

也可以使用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"表示表范围(标题行除外)

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


我尝试了您的[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,仅在脚本页上运行时会收到错误,但在实际的
扩展平台

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

@ drizzt09调用方法时,您可能nullevent参数指定了参数,否则当触发实际事件时,Google Spreadsheet基础结构会正确填充该参数。
克里斯蒂安·卢帕斯库

3
@ drizzt09更改排列顺序,改变range.sort这样一行:range.sort( { column : columnToSortBy, ascending: false } ); 。有关更多排序选项,请参阅developers.google.com/apps-script/class_range#sort
Cristian Lupascu 2012年

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

10

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

要创建脚本:

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

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

 // 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 } );
  }
}

3
我发现我不得不var sheet = SpreadsheetApp.getActiveSpreadsheet();代替这里的东西。
dldnh

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

似乎不起作用
shadowz1337

6

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

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

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


4
您能告诉我该放在哪里吗?
路易·特兰

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

0

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

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

为此,请修改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的堆栈溢出答案中提取的在图纸上自动排序


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.