我有如下问题。 第一:分别在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');
}
}
答案 0 :(得分:0)
如果日期是假日,您可以使用 onEdit(e) 简单触发器取消选中复选框。
检查您的共享文档后,您的 Google Sheet 时区设置为东京 (+09:00),但您的脚本时区设置为 America/Los_Angeles
。
要更新您的脚本时区:
Project Settings setting
Show "appsscript.json" manifest file in editor
复选框。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();
}
}
}
e.source
和 e.range
获取 range 对象和 event objects 对象。range.isChecked()
返回范围内的所有单元格是否都将其复选框状态设为“已选中”。如果某些单元格已选中而其余单元格未选中,或者某些单元格没有复选框数据验证,则返回 null。
如果修改的单元格是一个复选框,则获取A列中的假期列表。range.getDisplayValues()返回一个二维字符串值数组,使用Array.prototype.flat()将其更改为1- d 字符串值数组。然后使用 Array.prototype.filter() 删除空单元格值。
使用 range.getValue() 获取复选框的日期。由于您的假期日期列表采用 DD/MM/YYYY
格式,因此请使用 Utilities.formatDate(date, timeZone, format)
使用 Array.prototype.includes() 检查第 4 步中的转换日期是否列在您的假日数组列表中。如果在假期数组列表中找到它,请使用 range.uncheck()
取消选中复选框