google-apps-script - 在某人可以对列进行排序之前显示对话框
问题描述
- 我有一列数字(查询结果)。
- 除非我将其格式化为数字(格式菜单 > 数字 > 数字),否则数字不会相加。
- 将它们格式化为数字后,我得到总数。但是,电子表格的用户不知道或忘记了将数字格式化为数字的步骤。
- 他们触发这种情况的唯一动作是使用 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
触发触发器,但会触发可安装 onChange
的触发器
- 因此,
onChange
以事件对象为特征changeType
- 对工作表进行排序会导致
changeType
OTHER
现在您可以编写如下函数:
function bindMeToAnOnChangeTrigger(e){
if(e.changeType=="OTHER"){
SpreadsheetApp.getUi().alert("Please go to Format menu > Number > Number");
}
}
- 请注意,您需要手动将函数绑定
bindMeToAnOnChangeTrigger(e)
到可安装的onEdit
触发器,方法是继续Edit->Current Project's triggers->New trigger
- 请注意,某些其他
onCahnge
类型的事件OTHER
也可能触发触发器,因此您可能希望实施其他标准来验证是否应向用户发出警报。
更新
如果您想在显示警报之前实现附加条件检查单元格格式,您可以使用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());
}
}
推荐阅读
- django - 获取有条件的数据
- react-native - tabBarOnPress 不工作 bottomTabNAvigator
- c# - 使用 C# 程序比较两列中的值以更新数据库中的第三列
- c# - 在 C# 中更新对象属性,将属性作为参数传递?
- c++ - 在 libtorch 中使用 forward 的非法指令(核心转储)
- angular - IONIC 4 离子菜单未显示在离子菜单按钮单击上
- java - 部署 jar 文件时出现问题:错误依赖项
- java - Azure Functions with java - 如何获取函数中写入的日志?
- phaser-framework - 无法向场景添加补间
- docker - 在 TensorFlow 基础映像(1.13.2-gpu-py3)上安装 pip 包不起作用