實際上,您不需要解析日期來比較它們,JavaScript本身就可以做到這一點。 這裏是你的工作代碼:
function backgroundformate() {
var odpovediSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Odpovědi formuláře");
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
var lastRow = odpovediSheet.getLastRow();
var columnH = odpovediSheet.getRange(2, 8, odpovediSheet.getLastRow(), 1).getValues();
var today = new Date(new Date().setHours(23,59,59,0,0));// I set the hour to near midnight so you can get the right result today until 23:59:59
for (var i=1; i < columnH.length; i++) {
var dataday =columnH[i][0];
if (dataday < today) {odpovediSheet.getRange(i+1, 8, lastRow, 1).setBackground("red")}
else {odpovediSheet.getRange(i+1, 8, lastRow, 1).setBackground("yellow")}
}
}
此外,你也犯了一個錯誤在此代碼:
var dataday = parseInt(new Date(columnH[i][8]).getTime()/day);
你正在尋找的值在索引0,因爲你只能從該列中獲取數據當你定義範圍。 的代碼應該已經被
var dataday = parseInt(new Date(columnH[i][0]).getTime()/day);
但無論如何,解析是沒有必要的。
也就是說,在循環中調用ss服務並不是一個好習慣,你可以更高效地使用數組和單個SS調用。代碼如下所示,請嘗試比較執行速度。
function backgroundformate() {
var odpovediSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Odpovědi formuláře");
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
var columnH = odpovediSheet.getRange(2, 8, odpovediSheet.getLastRow()-1, 1).getValues();
var columnHBG = odpovediSheet.getRange(2, 8, odpovediSheet.getLastRow()-1, 1).getBackgrounds();
var today = new Date(new Date().setHours(23,59,59,0,0));
for (var i=0; i < columnH.length; i++) {
var dataday =columnH[i][0];
if (dataday < today) {
columnHBG[i][0]='#F00';
}else{
columnHBG[i][0]='#FF0';
}
}
odpovediSheet.getRange(2, 8, odpovediSheet.getLastRow()-1, 1).setBackgrounds(columnHBG);
}
謝謝!完美的作品 –