我有一个查询从主列表中收集名称并将它们放在工作表上。当它从该工作表中添加和删除名称时,我想添加和删除与名称一起使用的数据验证下拉框。
于是想到了求A列的最后一行和C列的最后一行的想法,因为C是下拉框所在的地方,A是他们的名字。并且通过获得这两列的差异,不仅可以确定位置,还可以确定需要更改多少单元格的大小。
我发现的一些事情是数据验证列表没有与第一项一起给出,这既好又坏。因此,我必须创建一个 setValue 函数,在下拉框所在的“PLACE”上设置名称,因为没有它,C 列的最后一行将被视为较少,因为数据验证下拉框计为“”。
这就是为什么我需要两列的差异,所以我可以将“PLACE”添加到验证框的单元格中,而不用“PLACE”一词替换列 C 中的每个单元格,因为每次编辑工作表时都会发生这种情况. 我找到了一些方法来找到我认为只是 columnA-ColumnC 左右的单个列的最后一行。甚至使它们成为绝对的。但是有一个数字我不允许在一个范围内使用它们,否则它会破坏整个系统。0.
function setValue(cellName, value) {
SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).setValue(value);
}
function onChange(e){
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var FirstEmptyA = getFirstEmptyRow('A:A');
Logger.log(FirstEmptyA);
var FirstEmptyC = getFirstEmptyRow('C:C');
Logger.log(FirstEmptyC);
var dif = Math.abs(FirstEmptyA - FirstEmptyC);
Logger.log(dif);
var rangeA = ss.getRange(2,3,FirstEmptyA -1)
var rangedif =ss.getRange(FirstEmptyA+1,3,dif-1)
var EmptyArow =ss.getRange(FirstEmptyA,3)
var validationList = SpreadsheetApp.newDataValidation().requireValueInList(['PLACE','MALL','BANK','SCHOOL'], true).build()
if(FirstEmptyA - FirstEmptyC < 0){
rangedif.clearDataValidations();
rangedif.clearContent();
}
else if(FirstEmptyC - FirstEmptyA < 0) {
rangeA.setDataValidation(validationList);
rangedif.setValue('PLACE');
}
else if (FirstEmptyC-FirstEmptyA = 0){
EmptyArow.setDataValidation(validationList);
setValue('C' + FirstEmptyC,'PLACE');
}
}
我一直在尝试许多不同的 if else 方法,但没有真正的帮助,因为每当我使用该函数时我都无法获得日志onChange。如果我onChange在脚本编辑器中运行一切正常,但是如果我在工作表中编辑任何内容,它会返回好的 ol'[] 事情仍然会发生,但是日志没有为我提供太多信息。我认为这与我正在编辑的单元格不在 C 列中有关。
除此之外,当我让它做事情时,“PLACE”或数据验证的位置通常有点不合时宜。因为我试图通过添加或减去数字使其不等于 0 来进行补偿。知道如何解决这个问题吗?
慕容708150
POPMUISE
相关分类