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
#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/
评论
参数必须用分号分隔;例如= 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