onEdit 未看到粘贴的更改,google 张
onEdit not seeing pasted changes, google sheets
我在 (J1) 中有一个单元格计数器,每次单元格 (J2) 更改时都会计数,终于让计数器开始工作,但我注意到它只“看到”手动编辑,不计算任何复制-粘贴值(我将值直接粘贴到单元格 J2 中)。无论如何要解决这个问题,因为手动输入值会破坏整个目的。
这是我目前所拥有的
function onEdit(e) {
incrementCounter_(e);
}
/**
* Increments a counter in a cell when another cell is edited.
*
* @param {Object} e The event object.
*/
function incrementCounter_(e) {
var sheetToWatch = 'Work Order';
var cellToWatch = 'J2';
var cellToIncrement = 'J1';
if (!e || !e.range) {
return;
}
var sheet = e.range.getSheet();
if (sheet.getName() === sheetToWatch && e.range.getA1Notation() === cellToWatch) {
var cell = sheet.getRange(cellToIncrement);
cell.setValue((Number(cell.getValue()) || 0) + 1);
}
}
如果您的意思是粘贴到包含 J2 的范围(不是从 J2 开始),那么您需要检查 J2 是否在编辑范围内。
脚本:
function incrementCounter_(e) {
var sheetToWatch = 'Work Order';
var cellToIncrement = 'J1';
var range = e.range;
// get the dimension of the range
var rowStart = range.getRow();
var rowEnd = range.getLastRow();
var colStart = range.getColumn();
var colEnd = range.getLastColumn();
// boolean if range edited does not include J2 (2, 10)
var invalidRange = rowStart > 2 || rowEnd < 2 || colStart > 10 || colEnd < 10;
// return if range is invalid
if (!e || !e.range || invalidRange){
return;
}
var sheet = e.range.getSheet();
// range should be valid (negated boolean value)
if (sheet.getName() === sheetToWatch && !invalidRange) {
var cell = sheet.getRange(cellToIncrement);
cell.setValue((Number(cell.getValue()) || 0) + 1);
}
}
输出:
注:
onEdit
仅由用户编辑触发。
尝试
function onEdit(e){
var sh = e.source.getActiveSheet()
for (var i = e.range.rowStart;i<=e.range.rowEnd;i++){
for (var j = e.range.columnStart;j<=e.range.columnEnd;j++){
incrementCounter_(sh.getRange(i,j),sh)
}
}
}
function incrementCounter_(rng,sh) {
var sheetToWatch = 'Work Order';
var cellToWatch = 'J2';
var cellToIncrement = 'J1';
if (sh.getName() === sheetToWatch && rng.getA1Notation() === cellToWatch) {
var cell = sh.getRange(cellToIncrement);
cell.setValue((Number(cell.getValue()) || 0) + 1);
}
}
或
function onEdit(e) {
var sh = e.source.getActiveSheet()
var sheetToWatch = 'Work Order';
if (sh.getName() === sheetToWatch) {
var cellToWatch = 'J2';
var cellToIncrement = 'J1';
for (var i = e.range.rowStart; i <= e.range.rowEnd; i++) {
for (var j = e.range.columnStart; j <= e.range.columnEnd; j++) {
if (sh.getRange(i, j).getA1Notation() === cellToWatch) {
sh.getRange(cellToIncrement).setValue((Number(sh.getRange(cellToIncrement).getValue()) || 0) + 1)
}
}
}
}
}
我在 (J1) 中有一个单元格计数器,每次单元格 (J2) 更改时都会计数,终于让计数器开始工作,但我注意到它只“看到”手动编辑,不计算任何复制-粘贴值(我将值直接粘贴到单元格 J2 中)。无论如何要解决这个问题,因为手动输入值会破坏整个目的。
这是我目前所拥有的
function onEdit(e) {
incrementCounter_(e);
}
/**
* Increments a counter in a cell when another cell is edited.
*
* @param {Object} e The event object.
*/
function incrementCounter_(e) {
var sheetToWatch = 'Work Order';
var cellToWatch = 'J2';
var cellToIncrement = 'J1';
if (!e || !e.range) {
return;
}
var sheet = e.range.getSheet();
if (sheet.getName() === sheetToWatch && e.range.getA1Notation() === cellToWatch) {
var cell = sheet.getRange(cellToIncrement);
cell.setValue((Number(cell.getValue()) || 0) + 1);
}
}
如果您的意思是粘贴到包含 J2 的范围(不是从 J2 开始),那么您需要检查 J2 是否在编辑范围内。
脚本:
function incrementCounter_(e) {
var sheetToWatch = 'Work Order';
var cellToIncrement = 'J1';
var range = e.range;
// get the dimension of the range
var rowStart = range.getRow();
var rowEnd = range.getLastRow();
var colStart = range.getColumn();
var colEnd = range.getLastColumn();
// boolean if range edited does not include J2 (2, 10)
var invalidRange = rowStart > 2 || rowEnd < 2 || colStart > 10 || colEnd < 10;
// return if range is invalid
if (!e || !e.range || invalidRange){
return;
}
var sheet = e.range.getSheet();
// range should be valid (negated boolean value)
if (sheet.getName() === sheetToWatch && !invalidRange) {
var cell = sheet.getRange(cellToIncrement);
cell.setValue((Number(cell.getValue()) || 0) + 1);
}
}
输出:
注:
onEdit
仅由用户编辑触发。
尝试
function onEdit(e){
var sh = e.source.getActiveSheet()
for (var i = e.range.rowStart;i<=e.range.rowEnd;i++){
for (var j = e.range.columnStart;j<=e.range.columnEnd;j++){
incrementCounter_(sh.getRange(i,j),sh)
}
}
}
function incrementCounter_(rng,sh) {
var sheetToWatch = 'Work Order';
var cellToWatch = 'J2';
var cellToIncrement = 'J1';
if (sh.getName() === sheetToWatch && rng.getA1Notation() === cellToWatch) {
var cell = sh.getRange(cellToIncrement);
cell.setValue((Number(cell.getValue()) || 0) + 1);
}
}
或
function onEdit(e) {
var sh = e.source.getActiveSheet()
var sheetToWatch = 'Work Order';
if (sh.getName() === sheetToWatch) {
var cellToWatch = 'J2';
var cellToIncrement = 'J1';
for (var i = e.range.rowStart; i <= e.range.rowEnd; i++) {
for (var j = e.range.columnStart; j <= e.range.columnEnd; j++) {
if (sh.getRange(i, j).getA1Notation() === cellToWatch) {
sh.getRange(cellToIncrement).setValue((Number(sh.getRange(cellToIncrement).getValue()) || 0) + 1)
}
}
}
}
}