繁体   English   中英

如果单元格包含值,则可以从 Google 表格中的数据验证中选择复选框

[英]Able checkbox from data validation in Google Sheets if a cell contains a value

由于社区几乎可以满足我的需求,我一直在开发一个脚本。

我有一个包含2 种工作表的电子表格(每个员工 1 个工作表和 1 个归档工作表):当员工完成项目时,他可以通过复选框归档/取消归档一行; 并将此行删除到存档表。

我的脚本包含一个代码,当在 Col3 中添加新客户端时,该代码会自动用所有者的工作表填充 Col23。

function onEdit(event) {
  // assumes source data in sheet named Elisa-Miriam-Victor
  // target sheet of move to named Archive
  // getColumn with check-boxes is currently set to column 2 or B
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();


  // When a client is mentioned in Col3, fill automatically Col23 or W by the PM name    
  var lastRow = s.getLastRow();
  var col23 = s.getRange(lastRow, 23).getValue();
  if (r.getRow() == lastRow && r.getColumn() == 3 && col23 == ""){
    s.getRange(lastRow, 23).setValue(s.getSheetName());
 }

  // Archive a project with checked box from Archive Sheet
 if((s.getName() == "Miriam"||s.getName() == "Elisa"||s.getName() == "Hanane"||s.getName() == "Sarah"||s.getName() == "Apoorva"||s.getName() == "Victor")&& r.getColumn() == 2 && r.getValue() == true) { // copy past every time a new PM-sheet is added
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Archive");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  } 
  // Unarchive a project from Archive sheet to respective owner
  else if(s.getName() == "Archive" && r.getColumn() == 2 && r.getValue() == false) {
    var row = r.getRow();
    var nameColumn = 23;
    var name = s.getRange(row, nameColumn).getValue();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName(name);
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);   
}
}

我想要一个与此类似的代码,其目标是在填充 Col3 时从 Google 表格中的数据验证生成一个复选框 我不想使用选中或未选中框的文本; 我需要数据验证中的复选框,因为它允许员工存档/取消存档。

谢谢您的帮助!

要将复选框的创建合并到您现有的代码中,请修改您的第一个if语句,如下所示:

  if (r.getRow() == lastRow && r.getColumn() == 3 && col23 == ""){
    s.getRange(lastRow, 23).setValue(s.getSheetName());
    var rule = SpreadsheetApp.newDataValidation().requireCheckbox().build()
    s.getRange(lastRow,2).setDataValidation(rule);
  }

解释:

要设置复选框,您需要使用方法setDataValidation() ,使用标准requireCheckbox() 构建规则

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM