我有一个表,其中有start
和finish
列,只有当finish
单元格为空,而0
旁边的start
单元格不为空时,才能自动用0
填充finish
列中的单元格
到目前为止,当start
列(A3:A
范围)中的单元格选择时,应该会触发这个脚本:
function onSelectionChange(e)
{
const range = e.range,
sheet = e.source.getActiveSheet(),
col = range.getColumn(),
row = range.getRow(),
columns = [1], //check only first column (A)
startRow = 3; //range A3:A
//only allow single cell selection starting at A3:A
if (row < startRow || !columns.includes(col) || range.getNumColumns() !== 1 || range.getNumRows() !== 1 || sheet.getName() !== "Sheet1")
return;
for(let i = 0; i < columns.length; i++)
{
const start = sheet.getRange(startRow, columns[i], 10, 1), //get 10 rows
finish = sheet.getRange(startRow, columns[i] + 1, 10, 1); //get 10 rows
if (!start.isBlank())
{
if (finish.isBlank())
finish.setValue(0);
}
}
}
不幸的是,这将填充中finish
列中的每个单元格,并且只有当-- start
列中的任何单元格不为空,以及-- finish
列中的每个单元格为空时,才能填充
为了实现这一点,我是否必须单独遍历每个单元?
发布于 2022-03-16 05:04:03
用于逐个更新单个行。
尝试下面的示例脚本:-
function onEdit(e)
{
const range = e.range;
const sheet = range.getSheet();
const row = range.getRow();
const column = range.getColumn();
if(column === 1)
{
const finsh_Column = range.offset(0,1);
if(finsh_Column.getValue().length === 0)
{
finsh_Column.setValue(0)
}
}
}
发布于 2022-03-16 09:20:38
如果您不介意一次处理所有的行,那么可能是这样的:
function onSelectionChange(e) {
if (e.range.columnStart == 1 && e.range.rowStart > 3) add_zeros();
}
function add_zeros() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange('A3:B' + sheet.getLastRow());
var data = range.getValues();
data.forEach(row => row[1] = (row[0] != '' && row[1] == '') ? 0 : row[1]);
range.setValues(data);
}
https://stackoverflow.com/questions/71496564
复制相似问题