快速编辑多个单元格时,'onEdit'功能并不总是触发

时间:2015-11-04 07:26:15

标签: google-apps-script google-sheets

目的

这是一份清单。 人们在单元格中键入“x”。如果x是单元格中的唯一内容,则应更改为✓

脚本

function onEdit(e) {
  var r = e.range;
  if (r.getValue() === 'x' || r.getValue() === 'X') {
    r.setValue('✓');
    r.setHorizontalAlignment('center');
  }
}

问题

慢慢行动。

但是当快速输入时(即:键入'x',使用箭头键移动到另一个单元格,键入'x',移动,[快速重复多次]),一些单元格会更改,但有些单元格保持为x。

修改 我现在有一个工作(但不优雅)的解决方案。我还是想知道是否有更优雅的解决方案。

这可行

// Checks 300 rows and 11 columns, starting from E10 (row 10, col 5)
// if the value is 'x' or 'X', it changes it to a '✓'

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSheet();

  // getRange(row, column, numRows, numColumns)
  var values = sheet.getRange(10, 5, 300, 11).getValues();

  for (var i=0; i<values.length; i++) {
    for (var j=0; j<values[i].length; j++) {
      if ( values[i][j] === 'x' || values[i][j] === 'X') {
        var cell = sheet.getRange( 10 + i, 5 + j );
        cell.setValue('✓');
        cell.setHorizontalAlignment('center');
      }
    }
  }
}

每次onEdit触发时,都会检查表中的每个单元格(其中3300个)。由于onEdit似乎总是捕获最后一次编辑(但不是中间的编辑),这会将每个x更改为✓。

背景

在工作中,我被要求将核对表转换为Google Doc。各种表格中有数百个复选框。

我被要求让盒子有支票,✓,因为我们打印并向客户展示这份清单。

我的很多同事都不懂计算机,所以输入法必须非常简单。

问题

有没有办法修复原始脚本,还是有另一种更好的方法来执行此操作?

1 个答案:

答案 0 :(得分:0)

我不知道是否可以选择数据验证?否则你可以这样做;

  • 输入一个单元格:= char(10003),输出为✓
  • 创建数据验证并选择包含项目的列表
  • 复制符号(不是公式)并将其粘贴到框中(并在其后面添加逗号)
  • 如果您需要另一个未完成的符号,请使用= char(10005)重复前面的步骤,这将输出为✕

除此之外,您可以使用平方根符号,在我的Mac上可以使用选项-shift-V轻松输入,看起来像√(您必须为您的操作系统查找该组合)。