我最难让onEdit脚本起作用。我的工作有一个电话日志表,可用于跟踪电话(日期,时间,分配的技术等)。我们还有另一个工作表设置为数据透视表报告,称为“技术电话”。该工作表应该可以自动计算每种技术每天的通话次数。它可以正常工作,但是问题是,只要在“电话日志”工作表的“分配的技术”列中的单元格中添加了额外的空格,“技术电话”工作表就会将这部分人当作一个整体对待,因此好像有四个不同的“鲍勃等

我已经成功编写了一个脚本,以通过修剪Assigned Tech列的每个单元格中的空格来清除此问题,并且我正在尝试将其转换为onEdit脚本以完成相同的任务。

function onEdit(e)
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var r = ss.getActiveRange();
}

function myOnEdit()
{
  function replacer( str, p1, p2, offset, s ) {
    return p1
      }

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var cell = ss.getActiveCell().getA1Notation();
  var tsheet = "Phone Log";
  var sname = ss.getName();

  if (sname = tsheet) //Are we in the Phone Log sheet?
  {

    var r = ss.getActiveRange();
    var column = r.getColumn();

    if (column == 4) //Are we editing a cell in the "Assigned Tech" column?
    {

      var value = cell.getValue();
      if ( value == String )
      {
        value = value.replace( /^\s*(.*?)\s*$/gm , replacer );
        cell.setValue( value) ;
      }
    }
  }

}


因此,基本上,我正在尝试获取要编辑的单元格值,即“ Bob”,删除空白并将输入的值替换为已编辑的“ Bob”。当我在脚本编辑器中运行上述脚本时,没有出现任何错误,但是它不起作用。我确实将onMyEdit()安装为onEdit触发器。

有什么想法吗?

最佳答案

我很惊讶这对您有用。由于getA1Notation()调用,cell包含一个字符串,因此不支持.getValue().setValue()方法。

“活动”工作表和单元格的概念实际上不适用于onEdit()触发函数;它们在自己的执行实例中被调用,并且事件被传递给它们以提供上下文。请参见Understanding Events

您还使用=犯了一个简单但灾难性的错误。单个=是分配操作,有两种比较形式:=====。 (第一个比较两个对象的内容,第二个也比较这些对象的类型。)当您具有if (sname = tsheet)时,它不是在比较工作表的名称,而是将tsheet的内容分配给sname ,然后对sname进行布尔测试。 (这种类型的错误不会被解释器捕获,因为它是完全有效的……这不是您想要的。)

当您检查if ( value == String )时,是否意味着要检查值的TYPE是否为字符串?如果是这样,可以这样进行:if (typeof value === 'string')

更新的脚本

function myOnEdit(e)
{
  function replacer( str, p1, p2, offset, s ) {
    return p1
      }

  var ss = e.source;
  var cell = e.range;
  var tsheet = "Phone Log";
  var sname = ss.getName();

  if (sname === tsheet) //Are we in the Phone Log sheet?
  {

    var column = cell.getColumn();

    if (column == 4) //Are we editing a cell in the "Assigned Tech" column?
    {

      var value = cell.getValue();
      if (typeof value === 'string')
      {
        value = value.replace( /^\s*(.*?)\s*$/gm , replacer );
        cell.setValue( value );
      }
    }
  }
}

09-18 14:08