Google apps script 在某人可以对列进行排序之前显示对话框 我有一列数字(查询结果) 除非我将其格式化为数字(格式菜单>数字>数字),否则数字不会添加 将它们格式化为数字后,我得到总数。然而,电子表格的用户不知道或者忘记了将数字格式化为数字的步骤 它们触发此操作的唯一操作是使用row1:col2对col2进行排序 我正在考虑一个解决方案,显示一个对话框,上面写着“请通过“格式菜单>数字>数字”将列2格式化为数字” 我已尝试为row1:col2添加OneEdit,但在使用排序时,这不起作用(仅在编辑单元格值时起作用)

Google apps script 在某人可以对列进行排序之前显示对话框 我有一列数字(查询结果) 除非我将其格式化为数字(格式菜单>数字>数字),否则数字不会添加 将它们格式化为数字后,我得到总数。然而,电子表格的用户不知道或者忘记了将数字格式化为数字的步骤 它们触发此操作的唯一操作是使用row1:col2对col2进行排序 我正在考虑一个解决方案,显示一个对话框,上面写着“请通过“格式菜单>数字>数字”将列2格式化为数字” 我已尝试为row1:col2添加OneEdit,但在使用排序时,这不起作用(仅在编辑单元格值时起作用),google-apps-script,google-sheets,Google Apps Script,Google Sheets,需要帮助: 当col2不是数字格式时显示对话框,然后他们可以使用E85中的标题对其进行排序 尝试: function onEdit(e) { var ss = "REPORTS (AUTO)"; var row = e.range.getRow(); if (e.range.getA1Notation() === 'E85' && e.source.getActiveSheet().getName() === ss){ <show dialog box

需要帮助: 当col2不是数字格式时显示对话框,然后他们可以使用E85中的标题对其进行排序

尝试:

function onEdit(e) {
var ss = "REPORTS (AUTO)";
var row = e.range.getRow();
if (e.range.getA1Notation() === 'E85' && e.source.getActiveSheet().getName() === ss){
<show dialog box code here...>
}
函数onEdit(e){
var ss=“报告(自动)”;
var row=e.range.getRow();
if(e.range.getA1Notation()=='E85'&&e.source.getActiveSheet().getName()==ss){
}
排序不会触发
onEdit
触发器,但会触发
onChange
触发器
  • 因此,
    onChange
    changeType
  • 对工作表进行排序会导致
    变更类型
    其他
现在,您可以编写如下函数:

函数bindMeToAnOnChangeTrigger(e){
如果(如changeType==“其他”){
SpreadsheetApp.getUi().alert(“请转到格式菜单>数字>数字”);
}
}
  • 请注意,您需要手动将函数
    bindMeToAnOnChangeTrigger(e)
    绑定到可安装的
    onEdit
    trigger,方法是执行
    Edit->Current Project's triggers->New trigger
  • 请注意,类型为
    other
    的某些其他
    onCahnge
    事件也可能触发触发器,因此您可能需要实施其他标准来验证是否应提醒其他用户
更新

如果要在显示警报之前对单元格格式执行附加条件检查,可以使用:

函数bindMeToAnOnChangeTrigger(e){
如果(如changeType==“其他”){
var sheetName=“报告(自动)”;
var range=e.source.getSheetByName(sheetName).getRange(“A2:A20”);
var formats=range.getNumberFormats().flat();
Logger.log(格式);
//请在此设置所需的数字格式
var desiredFormat=“0
对于(var i=0;i
排序不会触发
onEdit
触发器,但会触发
onChange
触发器
  • 因此,
    onChange
    changeType
  • 对工作表进行排序会导致
    变更类型
    其他
现在,您可以编写如下函数:

函数bindMeToAnOnChangeTrigger(e){
如果(如changeType==“其他”){
SpreadsheetApp.getUi().alert(“请转到格式菜单>数字>数字”);
}
}
  • 请注意,您需要手动将函数
    bindMeToAnOnChangeTrigger(e)
    绑定到可安装的
    onEdit
    trigger,方法是执行
    Edit->Current Project's triggers->New trigger
  • 请注意,类型为
    other
    的某些其他
    onCahnge
    事件也可能触发触发器,因此您可能需要实施其他标准来验证是否应提醒其他用户
更新

如果要在显示警报之前对单元格格式执行附加条件检查,可以使用:

函数bindMeToAnOnChangeTrigger(e){
如果(如changeType==“其他”){
var sheetName=“报告(自动)”;
var range=e.source.getSheetByName(sheetName).getRange(“A2:A20”);
var formats=range.getNumberFormats().flat();
Logger.log(格式);
//请在此设置所需的数字格式
var desiredFormat=“0
对于(var i=0;i
非常感谢!我只需要一点关于标准的帮助。我可以做些什么来检查range
A2:A20
是否为数字格式,这样就不会调用
bindMeToAnOnChangeTrigger
了?另外,我的条件是
e.range.geta1 notation()='E85'
但是当我使用F85和其他工具进行排序时,它仍然会显示消息。至于检索格式-您可以使用-请参阅我的更新答案。至于
e.range.getA1Notation()
-不幸的是,
e.range
不是onChange触发器的有效事件对象。可能您有一些其他条件不涉及检索
e.range
e.value
?感谢更新。至于e.range,条件是当E85是已排序的单元格而不是F85或其他标题时……您如何选择ort by header?第85行有下拉菜单吗?非常感谢!我只需要一些关于条件的帮助。如何检查range
A2:A20
是否为数字格式,这样就不会调用
bindmetoanchangetrigger
?另外,我的条件是
e.range.getA1Notation()='E85'
但是当我使用F85和其他工具进行排序时,它仍然会显示消息。至于检索格式-您可以使用-请参阅我的更新答案。至于
e.range.getA1Notation()
-不幸的是,
e.range
不是onChange触发器的有效事件对象。可能您有一些其他条件不涉及检索
e.range
e.value
?感谢您的更新。至于e.range,条件是当E85是已排序并保存的单元格时