【问题标题】:Why is my Sorting script works inconsistently?为什么我的排序脚本工作不一致?
【发布时间】:2020-09-11 12:23:07
【问题描述】:

您好,乐于助人的贡献者,

我有一个响应谷歌表,其中包含一组具有不同类型数据值(屏幕截图)的数据范围,如下所示。 Col2 时间戳值是根据用户在 gform 中的输入自动生成的。我将它作为 col2 移动(默认在 col1 中),因为我想将 Quote ID 作为主键 col。报价 ID 值是根据提交 gform 时触发的 google 脚本自动生成的:-
gresponse 表排序不一致

我想我们会按时间戳对数据范围进行自动排序(我非常需要它来按时间戳排序),但这与我的情况不一致。我已经尝试了以下代码,但仍然无法始终如一地工作。但是,当我使用过滤器功能在工作表中手动对其进行排序以选择时间戳列然后对 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。

【问题讨论】:

  • 您是否在 formSubmit 触发器上运行此功能?为什么时间戳一开始就搞砸了?通常表单会按时间顺序将数据提交到目标工作表。
  • @ziganotschka OP 可能手动对其他列进行排序

标签: javascript google-apps-script google-sheets google-forms


【解决方案1】:

潜在问题:

  • 您问题中的前两种方法似乎没有定义 sheet 对象。

  • 我什至不确定你是否执行 multiSortColumns

  • 第三种方法也会对标题进行排序。

  • 另一个潜在的问题是使用时:

    const sheet = ss.getActiveSheet();
    

    后者认为活动工作表可以是电子表格文件中的任何选定工作表。

我建议你使用:

const sheet = ss.getSheetByName("Form Responses 1");

假设您要排序的工作表的名称是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});   
}

【讨论】:

  • 是的,您的解决方案有效,@Marios!谢谢!抱歉,之前我没有提到我调用排序函数的主函数。我认为突出这个问题并不重要,因为在此之前,该功能(方法 1)工作得很好,因为我在自 7 月以来使用它之前多次测试它。我注意到当我测试输入非gmail地址时它突然停止工作,并且从那时起影响了其他带有gmail地址的记录。有点怪异。我希望你的脚本能永远工作。谢谢!
猜你喜欢
  • 2017-09-14
  • 1970-01-01
  • 2013-03-09
  • 2018-08-05
  • 2021-06-09
  • 2013-01-03
  • 1970-01-01
  • 2016-03-10
  • 1970-01-01
相关资源
最近更新 更多