首页 > 解决方案 > 脚本帮助移动单元格值

问题描述

我有一个共享电子表格,我经常需要更正。我正在尝试编写一个脚本,如果与我共享工作表的人将信息放在错误的列中,它将自动移动单元格值。我可以清除条件的 if 语句,但在找出移动值的代码时遇到了麻烦。在 AI 列中有输入数字的第 8-30 行。在大多数情况下,除了某些情况(我的 if 语句涵盖了这些情况)外,B 列中不应包含任何内容。我希望我的脚本从 B 列中获取值,将其保留在同一行并将其添加到 A 列中的单元格中。然后我希望它删除在错误位置输入的值。任何人都可以帮助我使用语法来帮助我调用被编辑的单元格,获取其值,将其添加一列吗?

我从一个非常基本的脚本开始,稍后将限定我的 if 语句,以便在使 IF 语句更复杂之前确保它的工作。提前感谢您提供的任何帮助。

function onEdit(e) {
    var ss = SpreadsheetApp.getActive();
    var r = ss.getActiveRange();


    if(r.getColumn() == 2 ) {
        \\ need calls for current cell value and adding I believe what is below will clear the cell that gets edited.
        spreadsheet.getRange(r).activate();
        spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
    }
}

标签: google-apps-scriptgoogle-sheetstriggers

解决方案


从问题

我希望我的脚本从 B 列中获取值,将其保留在同一行并将其添加到 A 列中的单元格中。然后我希望它删除在错误位置输入的值。任何人都可以帮助我使用语法来帮助我调用被编辑的单元格,获取其值,将其添加一列吗?

利用 Edit 事件对象。

/**
 * @param {Object} e Edit event object
 * @param {Range} e.range Edited range, it could have a single cell or multiple cells
 * @param {number|string|boolean|Date} [e.value] Edited cell value. It's only included when a single cell is edited
 */
function onEdit(e){
   var e = e || (() => { 
      var obj = {range: SpreadsheetApp.getCurrentCell()}; 
      obj.range.columnStart = obj.range.getColumn();
      return obj
   })();
// If the onEdit function is executed from the script editor use the active cell
  if(e.range.columnStart === 2){
     const editedCell = e.range.getCell(1,1); // Grabs the top right cell of edited range
     const value = e.value || editedCell.getValue(); // If only one cell is edited we could use e.value, otherwise we need to use getValue();
     editedCell.offset(0,-1).setValue(value);
     editedCell.clearContent();
  }
}

推荐阅读