我需要检测对电子表格所做的更改是否在特定数据范围内进行,如果是,请设置当前更新时间
问题是,我有一个可以编辑标题和文本的电子表格,我不希望在电子表格上更新特定单元格中的更新时间,但当我编辑一系列单元格中的数据时,我确实希望更改更新时间。
以下是我必须更新的时间。
function onEdit(e)
{
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
ss.getRange("G10").setValue(new Date());
}
如果我编辑某些单元格(在B4: J6范围内),我只希望G10中的日期设置
您只需检查编辑事件是否发生在范围内。
function onEdit(e)
{
var sheet = SpreadsheetApp.getActiveSheet();
var editRange = sheet.getActiveRange();
var editRow = editRange.getRow();
var editCol = editRange.getColumn();
var range = sheet.getRange("B4:J6");
var rangeRowStart = range.getRow();
var rangeRowEnd = rangeRowStart + range.getHeight();
var rangeColStart = range.getColumn();
var rangeColEnd = rangeColStart + range.getWidth();
if (editRow >= rangeRowStart && editRow <= rangeRowEnd
&& editCol >= rangeColStart && editCol <= rangeColEnd)
{
// Do your magic here
}
}
我承认这是非常冗长的,但我仍然没有找到一个简单的方法范围alarange.contains(范围)
通过命名您的“触发器”范围,一旦您在脚本中设置了范围名称,您就不必弄乱脚本了。通过简单地在标准的谷歌工作表界面中编辑你的命名范围的范围,即使你扩大或缩小范围的大小,脚本仍然可以工作。
如果您按照此处的说明编辑区域中的任何单元格,请将您感兴趣的单元格区域命名为脚本的触发器:https://support.google.com/docs/answer/63175
我把我的范围命名为“triggerRange”。
function onEdit(e) {
var myRange = SpreadsheetApp.getActiveSheet().getRange('triggerRange'); //<<< Change Your Named Ranged Name Here inside the getRange() function.
//SpreadsheetApp.getUi().alert("myRange in A1 Notation is: " + myRange.getA1Notation()); //If you're having problems, uncomment this to make sure your named range is properly defined
//Let's get the row & column indexes of the active cell
var row = e.range.getRow();
var col = e.range.getColumn();
//SpreadsheetApp.getUi().alert('The Active Cell Row is ' + row + ' and the Column is ' + col); //uncomment this out to do testing
//Check that your active cell is within your named range
if (col >= myRange.getColumn() && col <= myRange.getLastColumn() && row >= myRange.getRow() && row <= myRange.getLastRow()) { //As defined by your Named Range
SpreadsheetApp.getUi().alert('You Edited a Cell INSIDE the Range!');//Repalace Your Custom Code Here
} else {
SpreadsheetApp.getUi().alert('You Edited a Cell OUTSIDE the Range!');//Comment this out or insert code if you want to do something if the edited cells AREN'T inside your named range
return;
}
}
PS:感谢其他海报为这个基本脚本提供了基本框架。显然,我已经对脚本进行了大量的注释,因此您可以轻松地对其进行测试。删除我在脚本中创建的警报,以获得更清晰的外观。。。或者只是复制并粘贴以下内容:
function onEdit(e) {
var myRange = SpreadsheetApp.getActiveSheet().getRange('triggerRange'); //<<< Change Your Named Ranged Name Here
//Let's get the row & column indexes of the active cell
var row = e.range.getRow();
var col = e.range.getColumn();
//Check that your active cell is within your named range
if (col >= myRange.getColumn() && col <= myRange.getLastColumn() && row >= myRange.getRow() && row <= myRange.getLastRow()) { //As defined by your Named Range
SpreadsheetApp.getUi().alert('You Edited a Cell INSIDE the Range!');//Repalace Your Custom Code Here
}
}
有一个事件作为参数提供给您的onEdit()
函数,它包含了编辑内容的必要信息。如果你想知道(e)
是关于什么的,这就是。
由于每次编辑都会调用onEdit()
函数,因此在决定是否退出时,您应该尽可能少地进行处理。通过使用传入的事件,您将需要更少的服务调用,从而提高效率。如果需要灵活,Rasmus的答案将A1表示法转换为列和行号的方法是很好的,但是如果编辑范围是固定的,您可以简单地使用常量值进行比较——同样,减少所需的处理时间。
function onEdit(e)
{
var editRange = { // B4:J6
top : 4,
bottom : 6,
left : 2,
right : 10
};
// Exit if we're out of range
var thisRow = e.range.getRow();
if (thisRow < editRange.top || thisRow > editRange.bottom) return;
var thisCol = e.range.getColumn();
if (thisCol < editRange.left || thisCol > editRange.right) return;
// We're in range; timestamp the edit
var ss = e.range.getSheet();
ss.getRange(thisRow,7) // "G" is column 7
.setValue(new Date()); // Set time of edit in "G"
}
如果某个事件(编辑单元格)发生在工作表的特定范围内(不是所有工作表),我想用OneEdit触发一个触发器吗?示例:我只想在编辑活页_1中名为“trgRng”(C10:C250)范围的单元格时触发。 我编码如下,但它触发所有的工作表,而不仅仅是特定范围的特定工作表 可能吗?怎样
试图复制整个电子表格,但我想没有api可以这样做。 基本上,我正在尝试做以下工作: 有一个电子表格,我想对其进行小的更改。 创建一个新的电子表格,将模板中的所有表格逐个复制到新的电子表格中(电子表格复制会更有效率) 创建新的电子表格工作正常,但从电子表格复制表格不起作用。 尝试了两种方法: 角: 给出以下错误: 对飞行前请求的响应未通过访问控制检查:无“访问控制允许原点” Google Sheet
我不熟悉谷歌电子表格功能,并尝试以以下方式应用公式: 我有一张床单 我想链接工作表2中的范围数据 现在需要考虑的是,它只显示了一个项目(最后一个),而这个范围本来应该显示十个项目(a1:a10) 有关更正上述公式的详细信息和帮助,请查看以下链接: https://docs.google.com/spreadsheets/d/1HX1eatP57A5k9Xku7awIVnBPQ2A4ICVrYXTs
我是谷歌脚本的新手,不知道是否有人能帮我。 我有一个共享的谷歌电子表格,基本上是用新的员工信息更新行。 我希望只有当插入这些新员工行时,特定列(比如F列)上的“ABC”字符串匹配时,才会触发电子邮件。基本上,电子邮件触发器会让我们的团队知道如何设置新的员工帐户。 有人能帮我吗?我不知道如何进行字符串匹配,也不知道如何让它专门发送给固定的电子邮件收件人。我已经安装了Python、gspread和gd
我有一个谷歌电子表格,我用它创建了一个谷歌表单。电子表格有两张表:一张有表单响应,另一张有配置数据。电子表格附带了一个表单响应触发的应用程序脚本,该脚本使用配置数据进行API调用。这个脚本运行完全符合我的要求。 我已经编写了电子表格更改触发脚本,试图更新表单问题之一的选项。但是,使用FormApp。openById或FormApp。openByUrl因“您无权调用…”而失败。 是否有某种方法可以将
我正试图让一个Google表单根据1个表单输入的数据,用多行填充电子表格,如下所示: 表单简单,客户信息最少https://docs.google.com/forms/d/1LrKlVuI7kxVU0lxz70Uu-2Obj4x3qIwe6nS-ErzbCAg/ 输入后,我需要表格在表格(或格式化表格)中输入数据,如下所示:-输入的每个部分(1、2或3)应位于单独的行中,具有相同的客户名称 然后,