Google apps script 只有一个Google应用程序脚本事件触发
下面的GoogleApps脚本只触发一些事件。例如,如果我将第16列更改为X,它将正确更新第17列。但是如果我随后删除第16列中的X,它会删除第17列中的日期,但不会重置fontcolor(Google apps script 只有一个Google应用程序脚本事件触发,google-apps-script,Google Apps Script,下面的GoogleApps脚本只触发一些事件。例如,如果我将第16列更改为X,它将正确更新第17列。但是如果我随后删除第16列中的X,它会删除第17列中的日期,但不会重置fontcolor(dataRangeAll.setFontColor(false)中的colorRow(r))。但是,如果fontcolor重置本身可以工作 是两个事件相继运行,还是下面的代码在某种程度上是错误的 一个示例电子表格 我看到它在你提供的样品中起作用。为了证实这一点,我在C列中添加了一个X,我看到L列中填写了一个日
dataRangeAll.setFontColor(false)
中的colorRow(r))。但是,如果fontcolor重置本身可以工作
是两个事件相继运行,还是下面的代码在某种程度上是错误的
一个示例电子表格
我看到它在你提供的样品中起作用。为了证实这一点,我在C列中添加了一个X,我看到L列中填写了一个日期并变成了金色。然后我去掉了X,日期就消失了,颜色也被去掉了。对吗?谢谢!是的,这是正确的。但请尝试删除P列中的x。文本应恢复为黑色。有时会,但随后添加x并再次删除,现在文本不会恢复为黑色。嗯。。我也尝试了P列,虽然有时速度有点慢,但总体上还是赶上了。所以我认为这一点的要点是,这应该是有效的,也许是一些缓慢的因素导致了比赛条件?你能试着简化代码让它运行得更快吗?谢谢。我会看看我是否能简化它。我对使用谷歌应用程序脚本/Javascript编程相当陌生。示例电子表格似乎如所述工作正常。由于问题最初已发布,Sheets服务已更新。这个问题是否应该结束?
function setDate(r){
var sheet = SpreadsheetApp.getActiveSheet();
var dataRange = sheet.getRange(r, 1, 1, 17);
var data = dataRange.getValues();
var row = data[0];
var date = new Date();
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
//Logger.log(date);
var Sdate = Utilities.formatDate(date,'GMT+0100','yyyy-MM-dd')
if(row[2] != ""){
sheet.getRange(r,12).setValue(Sdate);
} else if(row[2] == ""){
sheet.getRange(r,12).setValue("");
}
SpreadsheetApp.flush();
}
function setDate2(r){
var sheet = SpreadsheetApp.getActiveSheet();
var dataRange = sheet.getRange(r, 1, 1, 17);
var data = dataRange.getValues();
var row = data[0];
var date = new Date();
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
//Logger.log(date);
var Sdate = Utilities.formatDate(date,'GMT+0100','yyyy-MM-dd')
if(row[15] != ""){
sheet.getRange(r,17).setValue(Sdate);
} else if(row[15] == ""){
sheet.getRange(r,17).setValue("");
}
SpreadsheetApp.flush();
}
function colorRow(r){
var sheet = SpreadsheetApp.getActiveSheet();
var dataRange = sheet.getRange(r, 12, 1, 6);
var dataRangeAll = sheet.getRange(r, 1, 1, 17);
var data = dataRange.getValues();
var row = data[0];
var date = new Date();
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
//Logger.log(date);
var sheetDate = new Date(row[0]);
var Sdate = Utilities.formatDate(date,'GMT+0100','yyyy-MM-dd')
var SsheetDate = Utilities.formatDate(sheetDate,'GMT+0100', 'yyyy-MM-dd')
dataRangeAll.setFontLine(false);
//Om faktura har skickats
if(row[4] != ""){
dataRangeAll.setFontLine("line-through");
dataRange.setBackgroundRGB(255, 255, 255);
dataRangeAll.setFontColor('#cccccc');
//Om faktura inte har skickats och fakturadatum har uppnåtts
}else if(row[0] != "" && Sdate >= SsheetDate && row[4] == ""){
dataRange.setBackgroundRGB(255, 170, 86);
dataRange.setFontColor('#000000');
dataRangeAll.setFontColor(false);
//Om faktura inte har skickats, men fakturadatum är tomt
}else if(row[0] == ""){
dataRange.setBackgroundRGB(255, 255, 255);
dataRange.setFontColor('#cccccc');
dataRangeAll.setFontColor(false);
//Om faktura inte har skickats, men fakturadatum inte har uppnåtts
}else{
dataRange.setBackgroundRGB(255, 255, 255);
dataRange.setFontColor('#777777');
dataRangeAll.setFontColor(false);
}
SpreadsheetApp.flush();
}
function onEdit(event)
{
var r = event.source.getActiveRange().getRowIndex();
if (r >= 3) {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
//När en produktion markeras som klar eller inte
var watchColumn = 3; //A=1, B=2, C=3...
var activeColumn = ss.getActiveCell().getColumn();
if (activeColumn == watchColumn){ //only run if change in watch column
setDate(r);
}
//När en faktura markeras som skickad eller inte
var watchColumn2 = 16; //A=1, B=2, C=3...
var activeColumn2 = ss.getActiveCell().getColumn();
if (activeColumn2 == watchColumn2){ //only run if change in watch column
setDate2(r);
}
colorRow(r);
}
}