我在這方面很糟糕,我嘗試搜索并有一個有點可行的腳本(應用程式腳本),但我無法讓它按照我想要的方式作業。我確定我錯誤地添加/編輯了東西。
我的 Google 作業表是一個小組作業跟蹤器,如下圖所示。

主要需要是在有人選中或取消選中這些列中的任何復選框時添加警報訊息(以防止任何誤點擊 - 像這樣
)。我們使用自定義單元格值分別為“1”和“0”。帶有復選框的列是 F、K、P、R、S。除此之外,當檢查列F&k中的任何復選框時,我希望時間戳(格式化DD / MM / YYYY)剛填充2列(并確認警報訊息)。但是,當已勾選的復選框未勾選時,不應洗掉或更新日期。
下面的腳本在一定程度上有效,但我不知道如何修改它。
function onEdit(e) {
const sh=e.range.getSheet();
if(sh.getName()=='Video Projects' && e.range.columnStart==6,11,16,18 && e.value=='1') {
var resp=SpreadsheetApp.getUi().alert('Are you sure you want to tick this checkbox?', SpreadsheetApp.getUi().ButtonSet.YES_NO);
if(resp==SpreadsheetApp.getUi().Button.YES) {
var range = e.range;
var sheet = range.getSheet();
if(sheet.getSheetName() == "Video Projects") {
if(range.columnStart == 6) {
var nextCell = range.offset(0, 2);
nextCell.setValue(new Date());
} else if(range.columnStart == 11 && range.isChecked()) {
var nextCell = range.offset(0, 2);
nextCell.setValue(new Date());
}
}
};
}else{
e.range.setValue("0");
}
}
如果有人知道如何解決這個問題,那將非常有幫助!:)
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想選中 F、K、P、R、S 列的復選框。
- 單擊“F”和“K”列的復選框時,您希望將日期分別放在“H”和“M”列中。
改裝要點:
- 當
e.range.columnStart==6,11,16,18用作 if 陳述句時,所有值e.range.columnStart都是true。我認為這可能是您的問題的原因。
當這點反映在你的腳本中時,它變成如下。
修改后的腳本:
function onEdit(e) {
const columns = [6, 11, 16, 18, 19]; // columns F,K,P,R,S
const { range, value } = e;
const sheet = range.getSheet();
if (sheet.getSheetName() != 'Video Projects' || !columns.includes(range.columnStart) || value == "0") return;
const ui = SpreadsheetApp.getUi();
const res = ui.alert('Are you sure you want to tick this checkbox?', SpreadsheetApp.getUi().ButtonSet.YES_NO);
if (res == ui.Button.YES) {
if (range.columnStart == 6 || (range.columnStart == 11 && value == "1")) {
range.offset(0, 2).setValue(new Date());
}
return;
}
range.uncheck();
}
參考:
- 簡單觸發器
- 事件物件
添加1:
關于您的以下 2 個新請求,
請求 1:我們是否也可以在取消選中復選框時添加警報訊息?
請求2:是否可以只輸入日期為dd/mm/yyyy?
示例腳本如下。
示例腳本:
function onEdit(e) {
const columns = [6, 11, 16, 18, 19]; // columns F,K,P,R,S
const { range, value } = e;
const sheet = range.getSheet();
if (sheet.getSheetName() != 'Video Projects' || !columns.includes(range.columnStart)) return;
const ui = SpreadsheetApp.getUi();
const res = ui.alert('Are you sure you want to tick this checkbox?', SpreadsheetApp.getUi().ButtonSet.YES_NO);
if (res == ui.Button.YES) {
if (range.columnStart == 6 || (range.columnStart == 11 && value == "1")) {
range.offset(0, 2).setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy"));
}
return;
}
range.uncheck();
}
添加2:
關于您關注一個新的請求,
請求 1:可以更改為“您確定要取消選中此復選框嗎?”
示例腳本如下。
示例腳本:
function onEdit(e) {
const columns = [6, 11, 16, 18, 19]; // columns F,K,P,R,S
const { range, value } = e;
const sheet = range.getSheet();
if (sheet.getSheetName() != 'Video Projects' || !columns.includes(range.columnStart)) return;
const ui = SpreadsheetApp.getUi();
if (value == "0") {
const res = ui.alert("Are you sure you want to untick this checkbox?", SpreadsheetApp.getUi().ButtonSet.YES_NO);
if (res == ui.Button.NO) range.check();
return;
}
const res = ui.alert('Are you sure you want to tick this checkbox?', SpreadsheetApp.getUi().ButtonSet.YES_NO);
if (res == ui.Button.YES) {
if (range.columnStart == 6 || (range.columnStart == 11 && value == "1")) {
range.offset(0, 2).setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy"));
}
return;
}
range.uncheck();
}
uj5u.com熱心網友回復:
function onEdit() {
var now = new Date()
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
var row = ss.getActiveRange().getRow()
ss.getRange(row, 1).setValue("value for first Col")
ss.getRange(row, 2).setValue("value for second Col")
ss.getRange(row, 3).setValue(now) //third Col with the current date/Time
}
每次編輯檔案中的任何單元格時都會觸發上面的代碼。為了防止這種情況,您可以添加一個 if/else 陳述句來像這樣檢查 Column。
var col = ss.getActiveRange().getColumn()
if (col == 2){//replace the 2 with the checkbox Column.
//do this
}
現在,每次您編輯第二列中的單元格并將值添加到同一行時,代碼都會觸發。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/355752.html
上一篇:Google表格匹配索引陣列公式
