javascript - 在编辑功能中按值定位
问题描述
我正在创建一个需要时间戳的工作表,每次单元格值更改为“x”。时间戳必须是“x”右侧的一个单元格。我有多个列,您可以在其中输入 x..
我已经尝试过使用标题,但它似乎不起作用?可能是因为您可以输入“x”的地方不在标题下方吗?任何人都可以帮助我或建议另一种方法吗?
function onEdit(e) {
var sheet = e.source.getActiveSheet();
if (sheet.getName() == "Mandagstræning") {
var actRng = sheet.getActiveRange();
var editColumn = actRng.getColumn();
var rowIndex = actRng.getRowIndex();
var headers = sheet.getRange(1, 1, sheet.getLastColumn()).getValues();
var dateCol = headers[0].indexOf("Tid") + 1;
var orderCol = headers[0].indexOf("dato") + 1;
if (dateCol = "x" && rowIndex > 1 && editColumn == orderCol) {
sheet.getRange(rowIndex, dateCol).setValue(Utilities.formatDate(new Date(), "UTC+8", "MM-dd-yyyy HH.mm.ss"));
}
}
}
现在,当我将值更改为 x 时,我什么也得不到。我的标题在工作表的第一行。
这是我的工作表的示例。 https://docs.google.com/spreadsheets/d/11Rtbqs08Xw5VxA6DRZQ6PnQtsOPZJbV4YGcLfpkEuvA/edit?usp=sharing
解决方案
这是我想出的。您可以在演示表中看到它的工作原理。
function onEdit(e) {
var sheet = e.source.getActiveSheet();
if (sheet.getName() == "Mandagstræning") {
var actRng = sheet.getActiveRange();
var editColumn = actRng.getColumn();
var rowIndex = actRng.getRowIndex();
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); // changed
var dateCol = headers[0].indexOf("Tid") + 1;
var orderCol = headers[0].indexOf("dato") + 1;
if (sheet.getRange(rowIndex, orderCol).getValue() === "x") { // changed
sheet.getRange(rowIndex, dateCol).setValue(Utilities.formatDate(new Date(), "UTC+8", "MM-dd-yyyy HH.mm.ss"));
}
}
}
关键是标记为的两行// changed
。对于第一个,我只想要 1 行范围,所以我将第三个参数的行数添加为 1。对于第二个,您需要获取正确单元格的值并使用比较相等运算符 ( ===
) 而不是赋值运算符 ( =
)。
编辑:看到更新的工作表后
我调整了示例表中的代码,如下所示:
function onEdit(e) {
var sheet = e.source.getActiveSheet();
if (sheet.getName() == "Mandagstræning") {
var actRng = sheet.getActiveRange();
var editColumn = actRng.getColumn();
var rowIndex = actRng.getRowIndex();
var headers = sheet.getRange(1, editColumn, 1, sheet.getLastColumn()).getValues();
var orderCol = headers[0].indexOf("dato") + editColumn;
var dateCol = headers[0].indexOf("Tid") + editColumn;
if (sheet.getRange(rowIndex, orderCol).getValue() === "x") {
sheet.getRange(rowIndex, dateCol).setValue(Utilities.formatDate(new Date(), "UTC+8", "MM-dd-yyyy HH.mm.ss"));
}
}
}
您会注意到,我正在从活动单元格的列开始寻找第一个匹配的订单和日期列。然后,如果订单列中x
的值为 ,则将其后的第一个匹配日期列中的值设置为当前日期。
推荐阅读
- javascript - 页面正在通过 Otp 提交而不刷新?
- asp.net-mvc - Asp.Net MVC 不隐藏 URL 中的参数名称
- hadoop - 为什么即使映射器和减速器的数量设置为 1,hive 仍将 2 个部分文件写入 hdfs
- sql - 如何通过 IF 语句中的 sql 命令更新表中的记录
- flutter - 如何在 Flutter 发布模式下“摇树”内部 QA 页面?
- python - POST 请求不影响本地主机服务器中的 HTML 输出
- redis - 有没有办法在集群上刷新,以便从数据库中删除主从的所有密钥
- java - 如何通过所有线程发送消息?
- three.js - 视图矢量和法线之间的角度?
- python - 过滤掉熊猫数据框中A或B列上不存在的数字?