脚本帮助移动单元格值

时间:2021-06-17 16:16:06

标签: google-apps-script google-sheets triggers

我有一个共享的电子表格,我需要经常更正。我正在尝试编写一个脚本,如果与我共享工作表的人将信息放在错误的列中,该脚本将自动移动单元格值。我可以清除条件的 if 语句,但是我在找出移动值的代码时遇到了麻烦。 在 A 列中,我有第 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});
    }
}

2 个答案:

答案 0 :(得分:2)

来自问题

<块引用>

我希望我的脚本从 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();
  }
}

答案 1 :(得分:1)

大概是这样的:

function onEdit(e) {
  var s = e.source.getActiveSheet();
  var col = e.range.columnStart;
  if (col != 2) return;

  var range = s.getActiveCell();
  var value = range.getValue();
  range.clearContent();
  range.offset(0,-1).setValue(value);
}

或者:

function onEdit() {
  var cell = SpreadsheetApp.getActiveSheet().getActiveCell();
  if (cell.getColumn() != 2) return;
  var value = cell.getValue();
  cell.clearContent();
  cell.offset(0,-1).setValue(value);
}

但我不明白,如果每个新单元格都会自动移动到“A”列,你怎么能填满“B”列?似乎“A”列将一直为空。

请注意,在此版本的代码中,如果您将擦除“B”列中的一个单元格(即使该单元格已经为空),脚本也会擦除“A”列中的一个单元格。

相关问题