我在开发项目时尝试学习脚本,因此,如果我提出的问题不正确,请原谅我。
我为Google表格文档创建了自动排序脚本,以按“体重”对球员列表进行排序。在添加以下公式之前,它工作正常。添加此公式后,我的数据将按第7列进行排序,从大到小并且不完全。奇怪的是,出现故障的球员被列为替补球员。
此工作表的工作方式。
在“比赛工具”选项卡中,可以从“数据验证”单元格中选择球员。
数据验证列表来自MR1选项卡。
MR1选项卡根据MRTool中定义的导入范围获取列表。
这来自一个较大的文档,我提取了一些重要部分以使错误发生。我试图运行仅文本和AutoSort脚本的准系统,并且可以正确排序。我还尝试过更改AutoSort进入的列,并且它可以正常工作。
停止脚本运行的公式:
=if(or(C10="",C10=". Blank"),"",iferror(index('MR1'!$B$8:$H$87,(match(C10,'MR1'!$N$8:$N$87,0))),"Player Not Found"))
自动排序的脚本:
var roster = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Match Tool");
var range1 = roster.getRange("B10:K59");
var range2 = roster.getRange("N10:W59");
range1.sort( [{ column : 7, ascending: false}, { column : 11, ascending: false}] );
range2.sort( [{ column : 19, ascending: false}, { column : 23, ascending: false}] );
}
function SortLeft() {
var roster = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Match Tool");
var range1 = roster.getRange("B10:K59");
range1.sort( [{ column : 7, ascending: false}, { column : 11, ascending: false}] );
}
function SortRight() {
var roster = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Match Tool");
var range2 = roster.getRange("N10:W59");
// It seems that column numbers are always sequential from the first one, even if you are addressing a range. Hence using 14/18 here instead of 4/8
range2.sort( [{ column : 19, ascending: false}, { column : 23, ascending: false}] );
}
function SortSelection() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getActiveRange();
var firstcol = range.getColumn();
var lastcol = range.getLastColumn();
//Before sorting, this code checks to make sure that Clan through Combined heroes is selected on one side or the other. If not, an error appears.
if (firstcol == 2 && lastcol == 11 ) { range.sort( [{ column : 7, ascending: false}, { column : 11, ascending: false}] )} //&& lastcol == 11
else if ( firstcol == 14 && lastcol == 23 ) { range.sort( [{ column : 19, ascending: false}, { column : 23, ascending: false}] )} //&& lastcol == 23
else { SpreadsheetApp.getUi().alert('You can only sort selections that include all 8 data columns, from Clan to Notes.');}
}
function onEdit(e){
var roster = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Match Tool");
var autosort = roster.getRange(6, 13).getValue();
var range1 = roster.getRange("B10:K59");
var range2 = roster.getRange("N10:W59");
// if('B3' === GWL) {
// SpreadsheetApp.getActiveSheet().getRange('K2').setValue('40');
// }
// test if K2 (war size) was modified
if (e.source.getActiveSheet().getName() == "Match Tool" && e.range.rowStart === 6 && e.range.columnStart === 13) {
moveToSub();
}
//preform autosort if on
if ( autosort == "On" ){
range1.sort( [{ column : 7, ascending: false}, { column : 11, ascending: false}] );
range2.sort( [{ column : 19, ascending: false}, { column : 23, ascending: false}] );
}
}
我希望玩家按第7列(G列)降序排列,然后按第11列(K列)降序排列。我得到的是某些玩家未正确排序。
我得到-132、131、131、113、111, 132 , 113 ,90、88、87、86。
我应该看到- 132 ,132、131、131, 113 ,113、111、90、88、87、86。
谢谢您抽出宝贵的时间来帮助我。
答案 0 :(得分:0)
在朋友的帮助下,我们意识到问题与该页面上的脚本无关,这是如何在导入数据的表上输入数据的。一些数字作为数字输入,而另一些数字作为文本输入。通过将文本更改为数字,脚本可以按预期执行。
所以故事的寓意是,请确保要排序的数据属于同一类型。