我有一个共享的电子表格,我需要经常更正。我正在尝试编写一个脚本,如果与我共享工作表的人将信息放在错误的列中,该脚本将自动移动单元格值。我可以清除条件的 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});
}
}
答案 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”列中的一个单元格。