为什么我的排序脚本工作不一致?
Why is my Sorting script works inconsistently?
嗨,有帮助的贡献者,
我有一个响应 google sheet,它有一组数据范围,其中包含不同类型的数据值(屏幕截图),如下所示。 Col2 时间戳值是在用户在 gform 中输入时自动生成的。我将其移动为 col2(默认为 col1),因为我想将报价 ID 作为主键 col。报价 ID 值是根据提交 gform 时触发的 google 脚本自动生成的:-
排序不一致
的响应sheet
我原以为我们会让数据范围按时间戳自动排序(我非常需要它按时间戳排序)但这与我的情况不一致。我已经尝试了以下代码,但仍然无法始终如一地工作。但是,当我使用功能过滤器在 sheet 中手动对其进行排序以选择时间戳列,然后对 A->Z 进行排序时,它工作正常。但这对我的要求无效
方法一:
// this resulted as in the screenshot.
SortRange = "A2:AC";
SortOrder = [{column:2, ascending: true}];
function multiSortColumns(){
var range = msheet.getRange(SortRange);
range.sort(SortOrder);
}
方法二:
// some sorted, some not but still wrong and not ascending order.
SortRange = 2,1,sheet.getLastRow() - 1, sheet.getLastColumn();
SortOrder = [{column:2, ascending: true}];
function multiSortColumns(){
var range = sheet.getRange(SortRange);
range.sort(SortOrder);
}
方法三
var sheet=SpreadsheetApp.getActiveSheet().sort(2);
// this doesn't sort by specific column we want and it includes sorting the header.
请帮助更正我的代码。提前TQVM.
潜在问题:
你问题中的前两个方法似乎没有定义
sheet
object.
另外我什至不确定你是否执行
multiSortColumns
完全没有。
第三种方法也会对 header 进行排序。
另一个潜在的问题是使用时:
const sheet = ss.getActiveSheet();
后者认为活动的sheet可以是传播sheet文件中的任何selectedsheet。
相反,我建议您使用:
const sheet = ss.getSheetByName("Form Responses 1");
假设您要排序的 sheet 的名称是 Form Responses 1
解决方案:
这是您第二种方法的修改版本,它确保在您执行 myFunction()
:
时执行所有内容
function myFunction() {
const ss = SpreadsheetApp.getActive();
// const sheet = ss.getActiveSheet(); // not recommended
const sheet = ss.getSheetByName("Form Responses 1"); // recommended
sheet.getRange(2, 1, sheet.getLastRow() -1, sheet.getLastColumn()).sort({column: 2, ascending: true});
}
嗨,有帮助的贡献者,
我有一个响应 google sheet,它有一组数据范围,其中包含不同类型的数据值(屏幕截图),如下所示。 Col2 时间戳值是在用户在 gform 中输入时自动生成的。我将其移动为 col2(默认为 col1),因为我想将报价 ID 作为主键 col。报价 ID 值是根据提交 gform 时触发的 google 脚本自动生成的:-
排序不一致
我原以为我们会让数据范围按时间戳自动排序(我非常需要它按时间戳排序)但这与我的情况不一致。我已经尝试了以下代码,但仍然无法始终如一地工作。但是,当我使用功能过滤器在 sheet 中手动对其进行排序以选择时间戳列,然后对 A->Z 进行排序时,它工作正常。但这对我的要求无效
方法一:
// this resulted as in the screenshot.
SortRange = "A2:AC";
SortOrder = [{column:2, ascending: true}];
function multiSortColumns(){
var range = msheet.getRange(SortRange);
range.sort(SortOrder);
}
方法二:
// some sorted, some not but still wrong and not ascending order.
SortRange = 2,1,sheet.getLastRow() - 1, sheet.getLastColumn();
SortOrder = [{column:2, ascending: true}];
function multiSortColumns(){
var range = sheet.getRange(SortRange);
range.sort(SortOrder);
}
方法三
var sheet=SpreadsheetApp.getActiveSheet().sort(2);
// this doesn't sort by specific column we want and it includes sorting the header.
请帮助更正我的代码。提前TQVM.
潜在问题:
你问题中的前两个方法似乎没有定义
sheet
object.另外我什至不确定你是否执行
multiSortColumns
完全没有。第三种方法也会对 header 进行排序。
另一个潜在的问题是使用时:
const sheet = ss.getActiveSheet();
后者认为活动的sheet可以是传播sheet文件中的任何selectedsheet。
相反,我建议您使用:
const sheet = ss.getSheetByName("Form Responses 1");
假设您要排序的 sheet 的名称是 Form Responses 1
解决方案:
这是您第二种方法的修改版本,它确保在您执行 myFunction()
:
function myFunction() {
const ss = SpreadsheetApp.getActive();
// const sheet = ss.getActiveSheet(); // not recommended
const sheet = ss.getSheetByName("Form Responses 1"); // recommended
sheet.getRange(2, 1, sheet.getLastRow() -1, sheet.getLastColumn()).sort({column: 2, ascending: true});
}