TIMEVALUE设置脚本



我正在尝试设置一个脚本的TIMEVALUE。我有一个列P,它是一个Timer列,它从NOW中减去一个时间来获得一个时间值,然后我将其转换为列O中的TIMEVALUE。当该值低于或高于某些值时,我希望列N有一个值,这样它就会触发我的复选框脚本。但由于某些原因,我无法触发TIMEVALUE。我试着把它放在另一个列中,并把值CopyAndPasted values Only放在一个每分钟一次的时间触发器上运行的列中,但显然这不算编辑,或者它没有读取DisplayValue。

function onEdit(e) {
timeValue(e);
checkboxes(e);
rangerTime(e);
}
function rangerTime(e){
var editRow = e.range.getRow();
var editColumn = e.range.getColumn(); 
if (editColumn === 13 && e.value == "TRUE") {
const sh = e.range.getSheet();
sh.getRange(editRow, 25).setValue(sh.getRange(editRow, 25).getValue()+1);
sh.getRange(editRow, 13).setValue(" ")
}
}
function timeValue(e) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var editRow = e.range.getRow();
var editColumn = e.range.getColumn();
if(editRow > 3) { 
var rowRange = sheet.getRange("O" + editRow);
var kCell = sheet.getRange("K" + editRow);
var kValue = kCell.getValue();
var nCell = sheet.getRange("N" + editRow);
var kHasValue = kValue != "";
if(editColumn > 10) {  
if(rowRange.getDisplayValue()<0.02 && !kHasValue){
nCell.setValue(1);
}
if (rowRange.getDisplayValue()>0.5 && !kHasValue){ 
nCell.setValue(1);
}
if(kHasValue) { 
nCell.setValue(" ");
}
}
}
}
function checkboxes(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
ui = SpreadsheetApp.getUi();

var names = ss.getRange("N4:N");
var namesValues = names.getValues();
var checkboxes = ss.getRange("M4:M");
var cbRows = checkboxes.getHeight();
var cbValues = checkboxes.getValues();
var newCBValues = new Array(cbRows); 

for (var row = 0; row < cbRows; row++) {
newCBValues[row] = new Array(0); 
if (namesValues[row] == "" || namesValues[row] == " ") { 
newCBValues[row][0] = " "; 
}else{ 
if (cbValues[row][0] === true) {
newCBValues[row][0] = true; 
}else{ 
newCBValues[row][0] = false; 

}   
}
}
checkboxes.setValues(newCBValues); 
}

该部分在每分钟时间触发器上运行:

function CopyandPaste() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('AA4').activate();
var currentCell = spreadsheet.getCurrentCell();
spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
currentCell.activateAsCurrentCell();
spreadsheet.getRange('O4').activate();
currentCell = spreadsheet.getCurrentCell();
spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
currentCell.activateAsCurrentCell();
spreadsheet.getRange('AA4:AA202').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};

AA列=TIMEVALUE(p列(

来自问题

我试着把它放在另一列中,并把值CopyAndPasted values Only放在一个每分钟一次的时间触发器上运行的列中,但显然这不算编辑,或者它没有读取DisplayValue。

您是对的,只有用户直接通过Google Sheets用户界面执行的操作才会触发编辑触发器。

一种选择是,让时间驱动的触发器除了更改复选框外,还调用timeValue函数,但您必须重构它,或者模拟编辑事件对象,将其作为timeValue参数传递。

参考

  • https://developers.google.com/apps-script/guides/triggers

最新更新