我有一列复选框,例如所附的照片My column 。
如果选中一个框,它将为另一个工作表中的单元格设置一个值。
如果我选中1号复选框,它将变为true,其余的仍为false 那么如果我选中2号框,那么它也会变成1号框,而其余框仍为false。
这是正常操作,但是我还需要其他内容
当我选中一个框时,它变为true,而其他所有框都变为false,则无论是否选中它们。换句话说,我希望一次选中一个框。
我可以这样做吗?
这是我的代码,如果选中此框,则可以设置一个值。
var hasValue = sheet.getRange("B2:B").getValues();
for (var i = 0; i < hasValue.length; i++) {
if (hasValue[i][0] == true) {
var transfer = sheet2.getRange(2, 2, 1, 1).setValue(i+1);
}
}
答案 0 :(得分:1)
这种行为被称为“单选按钮”。
最简单的方法是绑定简单的编辑触发器:
您将必须配置的极少样本,并且仅针对单单元格编辑进行配置。
function onEdit(e) {
if (!e || e.value === undefined)
return; // The function was run from the Script Editor, or a multi-cell range was edited.
const edited = e.range;
const s = edited.getSheet();
if (s.getName() !== "some name")
return; // A cell on the wrong sheet was edited
if (isCheckboxRow_(edited.getRow()) && isCheckboxCol_(edited.getColumn())) {
// The cell edited was in a row and a column that contains a checkbox
updateCheckboxes_(s, edited, e);
}
}
function isCheckboxRow_(row) {
// Assumes checkboxes are only in rows 5, 6, 7, 8, 9, and 10
return row >= 5 && row <= 10;
}
function isCheckboxCol_(col) {
// Assumes checkboxes are in column A
return col === 1;
}
function updateCheckboxes_(sheet, editRange, eventObject) {
if (!sheet || !edit || !eventObject)
return; // Make sure all required arguments are defined (i.e. this was called and not run from the Script Editor)
const cbRange = sheet.getRange("A5:A10"); // location of the checkboxes in a radio group.
cbRange.setValue(false);
editRange.setValue(eventObject.value);
// Reference some other sheet
const targetSheet = eventObject.source.getSheetByName("some other sheet name")
if (!targetSheet)
return; // the sheet name didn't exist in the workbook we edited.
// Reference a cell in the same row as the cell we edited, in column 1
const targetCell = targetSheet.getRange(editRange.getRow(), 1);
if (eventObject.value) {
// when true, give the target cell the value of the cell next to the edited checkbox
targetCell.setValue(editRange.offset(0, 1).getValue());
// do other stuff that should be done when a checkbox is made true
} else {
// the checkbox was toggled to false, so clear the target cell
targetCell.clear();
// do other stuff that should be done when a checkbox is made false
}
}
以上内容暗示了一些建议的做法,例如使用助手功能封装和抽象逻辑,从而使功能更易于理解。
评论:
答案 1 :(得分:0)
正如我提到的那样,我将给我们一个onEdit(event)来监视已选中哪个复选框,并循环浏览该列,并且仅将一个复选框设置为true。请注意,在您的代码段中,getRange(“ B2:B”)可能是999行。我使用getDataRange()来限制使用的行。我使用getCriteriaType()来检查它是否是复选框,而不是其他数据类型。我假设在您的sheet2上,您想记录上一次选中哪个框为true。 tehhowch的答案更为笼统,可能超出您的需求,因此这里的答案很有限。
Profit