google-apps-script - 在脚本中排序时可以指定标题行吗?

标签 google-apps-script google-sheets

我有一个电子表格,我想在处理文档时多次按多列进行排序。这是一个使用 GUI 的多步骤过程,并且似乎太耗时。我必须选中标题行框,设置第一个排序参数,然后添加另一个排序参数。唷!它很快就会变老。

对工作表进行排序没有问题,但标题行也已排序!我没有找到任何方法来指定我有一个标题行作为 sort() 函数的参数,也没有看到任何方法可以全局定义 sort() 自动注意到的标题行。

取而代之的是,我保存了标题行,删除了第一行,对工作表进行了排序,在最顶部插入了一个新行,重新创建了标题行,并设置了标题行的格式。哇!写的时间不长,效果还不错,但是太复杂了!

从用户的角度来看,标题行会短暂消失,然后又弹出。这还不算太糟糕,但很明显有些事情正在发生。

所以最后我回答了我的问题:我是否忽略了在排序时确认标题行存在的能力?或者,对脚本中存在标题行的工作表进行排序是否也会对标题行进行排序,而无需追索?

如果我的方法或类似方法需要避免在排序过程中包含标题行,我是否可以在某个地方通知 Google Apps 团队,以便他们考虑添加此功能?由于 GUI 中存在一个简单的复选框来指定标题行的存在,因此我希望它存在或可以在脚本内排序时添加。

编辑

我的原始代码(已删除文档/注释):

sheet.deleteRow(1);

rows.sort([<1st col>, <2nd col>]);

sheet.insertRowsBefore(1, 1);
for (var j = 0; j <= (numCols - 1); j++) {
  sheet.getRange(1, (j + 1)).setValue(firstRow[j]);
}

sheet.getRange(1, 1, 1, numCols).setFontWeight("bold");
sheet.getRange(1, 1, 2, numCols).setBorder(true, true, true, true, true, true);

我尝试用什么来代替上面的代码,感谢托马斯的建议:

sheet.setFrozenRows(1);
sheet.sort(<2nd col>);
sheet.sort(<1st col>);
sheet.setFrozenRows(0);

不幸的是,这只是按列排序,而不是按行排序。将第一个代码块中的 2 个 sheet.sort(); 调用替换为 rows.short(); 行不起作用。尝试此结果会导致我在评论中报告的初始问题,其中标题行与其他数据一起排序,即使第一行在排序之前被卡住。

此外,除非在下面添加另一行代码,否则我会在电子表格顶部收到永久的“正在工作...”通知。不过,这似乎并没有影响任何事情。

在所有情况下,varsheet = SpreadsheetApp.getActiveSheet();var rows =sheet.getDataRange();firstRow是标题行数据的数组。

最佳答案

In all cases, var sheet = SpreadsheetApp.getActiveSheet();, var rows = sheet.getDataRange();, and firstRow is an array of the header row data.

您可以只获取要排序的范围(即排除标题行),而不是使用 getDataRange():

var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn());
<小时/>

下一部分只是对“次要”问题的回答/观察:

After the script is finished, the header row was sorted along with all the other rows although the first row is frozen.

我认为这是 GAS 的一个限制,其中一些“电子表格工具”方法不能很好地配合使用 - this issue与你的不一样,但我认为它(有点)相关。

因此,通过“卡住标题”解决方法,我有兴趣查看 SpreadsheetApp.flush(); 是否插入在 sheet.setFrozenRows(1); 之后让它发挥作用。

关于google-apps-script - 在脚本中排序时可以指定标题行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12687541/

相关文章:

google-apps-script - Google Spreadsheet onEdit - 限制在一个范围内

jquery - 多次调用 google.script.run.withSuccessHandler

excel - 如何在 excel 或 google 表格上加入两个列表

尝试访问 Google 电子表格时的 Node.js

google-apps-script - 如何在谷歌电子表格中添加一行并引用另一个单元格?

html - XPath地址不够详细

javascript - 是否可以将副本放入预定义的文件夹而不是根文件夹中

google-apps-script - 通过 Google App Script 在 Google Sheet 上编辑多行时如何获得真实范围

google-apps-script - 如何使用 Google Apps 脚本中的 javascript 从模式对话框模板更新侧边栏模板中的 html?

google-sheets - 如何在条件格式自定义公式中寻址当前单元格?