当前位置: 首页 > 知识库问答 >
问题:

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

邓毅
2023-03-14

我有一个电子表格,当我处理文档时,我想按多个列多次排序。这是一个使用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<代码>工作表。排序() 使用行调用。short() 行不起作用。尝试这样做会导致我在注释中报告的最初问题,即标题行与其他数据一起排序,即使第一行在排序前已冻结。

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

在所有情况下,var list=SpreadsheetApp.getActiveSheet();var row=sheet.getDataRange();firstRow是头行数据的数组


共有2个答案

贺恩
2023-03-14

您要执行以下操作:

  • 创建电子表格

然后调用此脚本:

function myFunction() {
  SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().sort(1);
}

你看:)

带着亲切的问候,

托马斯·范·拉图姆

子车新立
2023-03-14

在所有情况下,风险值表=电子表格应用程序。getActiveSheet();,变量行=工作表。getDataRange();,第一行是标题行数据的数组。

不使用getDataRange(),只需获取要排序的范围(即排除标题行):

var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn());

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

脚本完成后,标题行与所有其他行一起排序,尽管第一行已冻结。

我认为这在GAS中有一点局限性,其中一些“电子表格工具”方法彼此之间的关系不好-这个问题与您的问题不一样,但我认为它(有点)相关。

因此,对于“冻结标题”的解决方案,我想看看是否SpreadsheetApp。冲洗() 就在工作表之后插入。setFrozenRows(1) 使它工作。

 类似资料:
  • 我正在开发一个应用程序,该应用程序必须针对使用google protocol buffers 3.0.0版的目标进行交叉编译。有没有办法在protoc命令(或.proto文件)中指定生成的代码应该与protocol buffers版本3.0.0兼容,即使我用来生成代码的protoc是更高版本(如3.5.1)? 更新目标不是一个选项,我也不介意在我的开发环境中安装3.0.0,但如果说任何想要构建此代

  • 我排序两栏在谷歌表使用脚本。 目前,两列都使用排序函数,我想知道是否可以对第一列使用自定义顺序(在这种情况下['OPEN','YES','NO']) 这里是一个指向示例电子表格的链接

  • 问题内容: 我今天才开始学习Python。我一直在阅读Byte Python。现在,我有一个涉及时间的Python项目。我在Byte of Python中找不到任何与时间有关的东西,所以我问你: 如何在用户指定的时间内运行块然后中断? 例如(用一些伪代码): 甚至更好: 问题答案: 我建议生成另一个线程,使其成为守护程序线程,然后休眠直到您希望任务终止。例如: 当所有非守护程序线程都退出时,Pyt

  • 可能重复: 在锚中放置div是否正确? 当我们编写某种“产品列表”时,您只需要一个链接,但它应该包含产品图像、产品名称、产品标题等。我们可以使用contain p或其他标签吗?是否存在跨浏览器问题? 我听说在html5中,一个标签可以包含p标签,但是仍然没有使用它的信心。 一些代码是这样的:

  • 是否有可能在函数的上下文中解析(实现)一个promise对象?是否有其他方法处理这个问题? UPD:这个代码对我有效。谢了!

  • 问题内容: 该方法返回枚举实例的序数。 如何设置枚举的序数? 问题答案: 您无法设定。它始终是常量定义的序数。请参阅Enum.ordinal()的文档: 返回此枚举常量的序数(其在枚举声明中的位置,其中初始常量的序数为零)。大多数程序员都不会使用这种方法。它设计用于复杂的基于枚举的数据结构,例如EnumSet和EnumMap。 实际上-您不需要。如果要一些整数属性,请定义一个。