我已经冲了过去,发现了我正在寻找的东西。我对我发现的东西进行了一些修改,但它的工作原理......主要是。但是当我在C列的不同工作表中进行编辑时,它会在DATA工作表中运行onedit()。我不希望这样,我无法阻止它。
我只想让它监控数据'片。对于范围C3:C5000或C3:C + lastrow,这将是理想的。行数不应超过5000行。
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var data_sheet = ss.getSheetByName("Data");
var editRange = ss.getActiveRange();
var editRow = editRange.getRow();
var editCol = editRange.getColumn();
var range = data_sheet.getRange("C3:C5000");
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)
{
RefreshImport2();
}
}
答案 0 :(得分:1)
您可以使用e
的事件对象onEdit(e)
检索多个信息以进行编辑。事件对象的详细信息为here。那么这个示例脚本怎么样?在此示例中,
在电子表格上编辑单元格时,如果工作表名称,列和行分别为Data
,C
和3 <= row <= 5000
,则会运行RefreshImport2()
。
function onEdit(e) {
if (
e.source.getSheetName() == "Data" &&
e.range.columnStart == 3 &&
e.range.columnEnd == 3 &&
e.range.rowStart >= 3 &&
e.range.rowEnd <= 5000
) {
RefreshImport2();
}
}
如果我误解了你的问题,我很抱歉。
您可以通过添加一个if语句来实现。在1st if语句中,当工作表名称为Data
时使用它。在2nd if语句中,当工作表名称为Data Entry
时使用它。每个if语句都不会相互干扰。
function onEdit(e) {
if (
e.source.getSheetName() == "Data" &&
e.range.columnStart == 3 &&
e.range.columnEnd == 3 &&
e.range.rowStart >= 3 &&
e.range.rowEnd <= 5000
) {
RefreshImport2();
}
if (e.source.getSheetName() == "Data Entry") {
// do something
}
}
我的理解是否正确?