【发布时间】:2019-06-07 11:22:05
【问题描述】:
我正在尝试在开发项目时学习脚本,所以如果我问错了这个问题,请原谅我。
我为 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。
感谢您花时间帮助我。
【问题讨论】:
标签: sorting google-apps-script google-sheets google-sheets-formula