【问题标题】:Using onEdit in Google Spreadsheets to edit cell contents live在 Google 电子表格中使用 onEdit 实时编辑单元格内容
【发布时间】:2013-04-12 18:07:43
【问题描述】:

我很难让我的 onEdit 脚本正常工作。我的工作有一个电话记录表,我们用它来跟踪电话(日期、时间、分配的技术等)。我们将另一个工作表设置为数据透视表报告,称为“技术电话”。该工作表应该自动计算每位技术人员每天的通话次数。它可以工作,但问题是任何时候额外的空格被添加到电话日志表中分配的技术列中的单元格,技术表的电话将其视为一个整体,所以看起来好像有 4 个不同的“鲍勃等。

我已经成功编写了一个脚本,通过修剪 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 触发器。

有什么想法吗?

【问题讨论】:

    标签: javascript google-apps-script google-sheets google-docs


    【解决方案1】:

    我很惊讶这对你有用。由于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 );
          } 
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      相关资源
      最近更新 更多