如何解决在有人可以对列进行排序之前显示对话框
- 我有一列带有数字(来自查询的结果)。
- 除非我将其格式化为数字(“格式”菜单>“数字”>“数字”),否则数字不会添加。
- 将它们格式化为数字后,我得到了总数。但是,电子表格的用户不知道或忘记了将数字格式化为数字的步骤。
- 他们唯一触发此操作的动作是在使用row1:col2对col2进行排序时
- 我正在考虑显示一个对话框的解决方案,该对话框显示“请通过转到“格式”菜单>“数字”>“数字”将col 2格式化为数字”
- 我尝试为row1:col2添加onEdit,但这在用于排序时不起作用(仅在编辑单元格值时有效)。
需要帮助: 当 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
触发器,但会触发installable onChange
触发器
- 因此,
onChange
具有event objectchangeType
- 排序工作表将产生
changeType
OTHER
现在您可以编写如下函数:
function bindMeToAnOnChangeTrigger(e){
if(e.changeType=="OTHER"){
SpreadsheetApp.getUi().alert("Please go to Format menu > Number > Number");
}
}
- 请注意,您需要通过继续执行
bindMeToAnOnChangeTrigger(e)
将功能 - 请注意,类型为
onCahnge
的某些其他OTHER
事件也可能会触发触发器,因此您可能需要实施其他条件以验证是否应向该用户发出警报。
onEdit
手动绑定到可安装的Edit->Current Project's triggers->New trigger
触发器上
更新
如果要在显示警报之前对单元格格式实施附加条件检查,则可以使用getNumberFormats():
function bindMeToAnOnChangeTrigger(e){
if(e.changeType=="OTHER"){
var sheetName = "REPORTS (AUTO)";
var range = e.source.getSheetByName(sheetName).getRange("A2:A20");
var formats = range.getNumberFormats().flat();
Logger.log(formats);
//Please set here your desired number format
var desiredFormat = "0.###############"
for(var i = 0; i < formats.length; i++){
if(formats[i] != desiredFormat){
return;
}
}
SpreadsheetApp.getUi().alert(e.source.getActiveSheet().getActiveCell().getA1Notation());
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。