使用谷歌应用程序脚本在谷歌工作表中自动勾选复选框

时间:2021-03-24 01:05:15

标签: google-apps-script

enter image description here

我有如下问题。 第一:分别在A列的节假日,我给订单列表表着色。

第二:节假日在F行(A列),复选框不打勾 我试过了,但没有成功 这是我的代码

function checkbox() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Sheet1');
  if (sheet.getRange('C2').getValue() =='6/2/2021'||sheet.getRange('C2').getValue() 
     =='7/2/2021') {
                     sheet.getRange('C9').setValue('FALSE');
}   else {
            sheet.getRange('C9').setValue('FALSE');
         }
}

1 个答案:

答案 0 :(得分:0)

如果日期是假日,您可以使用 onEdit(e) 简单触发器取消选中复选框。


先决条件:

  • 确保您的 Google 表格时区和脚本时区相同。

检查您的共享文档后,您的 Google Sheet 时区设置为东京 (+09:00),但您的脚本时区设置为 America/Los_Angeles

要更新您的脚本时区:

  1. 点击左侧的 Project Settings setting
  2. 选中 Show "appsscript.json" manifest file in editor 复选框。
  3. appsscript.json 文件中的 timeZone 属性更改为 "timeZone": "Asia/Tokyo"

示例代码:

function onEdit(e){

  var ss = e.source
  var sheetName = '注文記入表';
  var sheet = ss.getActiveSheet();
  var cell = e.range;

  Logger.log(cell.isChecked());
  //Check if modified cell is a checkbox and if it in sheet 注文記入表
  if(sheet.getName()==sheetName && cell.isChecked() != null){

    //Get Holidays
    var holidays = sheet.getRange('A1:A').getDisplayValues().flat().filter(String);

    //Get date value
    var dateVal = sheet.getRange(4,cell.getColumn()).getValue();
    Logger.log(dateVal);
    var dateStr = Utilities.formatDate(new Date(dateVal),Session.getScriptTimeZone(),"dd/MM/yyyy");
    Logger.log(dateStr);

    //If current date is a holiday, uncheck the checkbox
    Logger.log(holidays.includes(dateStr));
    if(holidays.includes(dateStr)){
      cell.uncheck();
    }
  }

}

它有什么作用?

  1. 分别使用 spreadsheet e.sourcee.range 获取 range 对象和 event objects 对象。
  2. 使用range.isChecked()检查修改后的单元格是否在'注文记入表'表中,是否是复选框
<块引用>

range.isChecked()

返回范围内的所有单元格是否都将其复选框状态设为“已选中”。如果某些单元格已选中而其余单元格未选中,或者某些单元格没有复选框数据验证,则返回 null。

  1. 如果修改的单元格是一个复选框,则获取A列中的假期列表。range.getDisplayValues()返回一个二维字符串值数组,使用Array.prototype.flat()将其更改为1- d 字符串值数组。然后使用 Array.prototype.filter() 删除空单元格值。

  2. 使用 range.getValue() 获取复选框的日期。由于您的假期日期列表采用 DD/MM/YYYY 格式,因此请使用 Utilities.formatDate(date, timeZone, format)

    将此格式的日期值转换为
  3. 使用 Array.prototype.includes() 检查第 4 步中的转换日期是否列在您的假日数组列表中。如果在假期数组列表中找到它,请使用 range.uncheck()

    取消选中复选框

注意:

  • 您无法在脚本编辑器中手动调试/运行此 onEdit()。如果您想对此进行测试,您需要在代码中包含日志、编辑工作表中的单元格并检查执行选项卡中的日志。