如何在每天午夜更新突出显示的单元格
How to make to update which cell is highlighted every day at midnight
我正在尝试制作每天午夜更新的 Google Sheet Apps 脚本。我希望它每天更改突出显示的单元格。我项目中的 9 张纸中的每一张都代表一个虚构的月份,每个月份有 40 天。我希望第 5 个月 (Van) 成为第一个用户,第 12 天应该突出显示 (D13)。在 Voan 的 40 天循环之后,它应该继续到下个月(从 1 开始)。当它到达最后一个月时,它应该在第一个月 (Peylior) 重新开始这一年。
这是 google 张:
https://docs.google.com/spreadsheets/d/1d6aVBQo3plrW0Glx4LQf987j1PGiwq5BnklhvtyEh4c/edit? usp=共享
此代码是否可以做到这一点:
function addTrigger() {
ScriptApp.newTrigger("updateCell").timeBased().atHour(0).everyDays(1).create();
}
function updateCell() {
//set color
var color = (255,0,0)
//open google sheets
var ss = SpreadsheetApp
//open the spreadsheet
var sheet = ss.getActiveSpreadsheet()
//create mnths array
var mnths = [
"Peylior",
"Memnor",
"Rollur",
"Uduir",
"Voan",
"Azzaz",
"Waap",
"Dustrem",
"Predco",
]
//get "System"
var sys = sheet.getSheetByName("System")
//find the month
var mnthind = mnths.indexOf(sys.getRange(1,2).getValue())
//get day
var day = sys.getRange(2,2).getValue()
//add 1 to day
day += 1
//check if month is over
if (day > 40) {
//reset days
day = 1
//change month to next in array unless a year has passed
if (mnthind=12) {sys.getRange(1,2).setValue(mnths[1])}
sys.getRange(1,2).setValue(mnths[mnthind+1])
}
//set the background of current day to color
sheet.getSheetByName(mnths[mnthind]).getRange(day+1,5).setBackground(color)
//update all
sys.getRange(1,2).setValue(mnths[mnthind])
sys.getRange(2,2).setValue(day)
}
我认为您不需要 google 应用程序脚本来执行此操作,只需使用条件格式
试试这个:
function updateCell() {
const color='#ff0000';
const def='#111111';//default color
const mnths=["Peylior","Memnor","Rollur","Uduir","Voan","Azzaz","Waap","Dustrem","Predco"];
const ss=SpreadsheetApp.getActive();
const sys=ss.getSheetByName("System");
var mnthind=mnths.indexOf(sys.getRange(1,2).getValue());//get current data before incrementing day
var sheet=ss.getSheetByName(mnths[mnthind]);//current month before change
var day=sys.getRange(2,2).getValue();//current day before change
day+=1;
if (day>40) {
day=1;
sheet.getRange(2,4,sheet.getLastRow()-1,1).setBackground(def);
if (mnthind==8) {
mnthindx=0;
sys.getRange(1,2).setValue(mnths[mnthind]);
}else{
mnthind+=1;
sys.getRange(1,2).setValue(mnths[mnthind])
}
}
sheet=ss.getSheetByName(mnths[mnthind]).getRange(2,4,sheet.getLastRow()-1,1).setBackground(def);//set column to default color
ss.getSheetByName(mnths[mnthind]).getRange(day+1,4).setBackground(color);//current day to selected color
sys.getRange(1,2).setValue(mnths[mnthind]); //save current day and month in sys
sys.getRange(2,2).setValue(day);
}
未测试。
代码存在一些问题。
第一个:
每次 运行 addTrigger()
都会在项目中添加一个新的触发器,因此请务必检查项目的触发器并删除重复的触发器,您可能不需要。
第二个:
您可能还想取消突出显示前一天,因此您可能希望将其编码。
第三名:
你的 if 赋值而不是比较。使用双等号 (==) 进行比较。
第四个:
您的日历有 9 个月而不是 12 个月,因此进行了调整。
示例:
function updateCell() {
var sheet = SpreadsheetApp.getActiveSpreadsheet()
//create mnths array
var mnths = [
"Peylior",
"Memnor",
"Rollur",
"Uduir",
"Voan",
"Azzaz",
"Waap",
"Dustrem",
"Predco"
]
//get "System"
var sys = sheet.getSheetByName("System")
//find the month
var mnthind = mnths.indexOf(sys.getRange(1,2).getValue())
//get day
var day = sys.getRange(2,2).getValue()
//remove the background of past day to color
sheet.getSheetByName(mnths[mnthind]).getRange(day+1,4,1,2).setBackground("#d9d9d9")
//add 1 to day
day += 1
//check if month is over
if (day > 40) {
//reset days
day = 1
//change month to next in array unless a year has passed
if (mnthind == 8) {mnthind = 0}
else{ mnthind++}
sys.getRange(1,2).setValue(mnths[mnthind])
}
//set the background of current day to color
sheet.getSheetByName(mnths[mnthind]).getRange(day+1,4,1,2).setBackground("yellow")
//update all
sys.getRange(1,2).setValue(mnths[mnthind])
sys.getRange(2,2).setValue(day)
}
我正在尝试制作每天午夜更新的 Google Sheet Apps 脚本。我希望它每天更改突出显示的单元格。我项目中的 9 张纸中的每一张都代表一个虚构的月份,每个月份有 40 天。我希望第 5 个月 (Van) 成为第一个用户,第 12 天应该突出显示 (D13)。在 Voan 的 40 天循环之后,它应该继续到下个月(从 1 开始)。当它到达最后一个月时,它应该在第一个月 (Peylior) 重新开始这一年。
这是 google 张:
https://docs.google.com/spreadsheets/d/1d6aVBQo3plrW0Glx4LQf987j1PGiwq5BnklhvtyEh4c/edit? usp=共享
此代码是否可以做到这一点:
function addTrigger() {
ScriptApp.newTrigger("updateCell").timeBased().atHour(0).everyDays(1).create();
}
function updateCell() {
//set color
var color = (255,0,0)
//open google sheets
var ss = SpreadsheetApp
//open the spreadsheet
var sheet = ss.getActiveSpreadsheet()
//create mnths array
var mnths = [
"Peylior",
"Memnor",
"Rollur",
"Uduir",
"Voan",
"Azzaz",
"Waap",
"Dustrem",
"Predco",
]
//get "System"
var sys = sheet.getSheetByName("System")
//find the month
var mnthind = mnths.indexOf(sys.getRange(1,2).getValue())
//get day
var day = sys.getRange(2,2).getValue()
//add 1 to day
day += 1
//check if month is over
if (day > 40) {
//reset days
day = 1
//change month to next in array unless a year has passed
if (mnthind=12) {sys.getRange(1,2).setValue(mnths[1])}
sys.getRange(1,2).setValue(mnths[mnthind+1])
}
//set the background of current day to color
sheet.getSheetByName(mnths[mnthind]).getRange(day+1,5).setBackground(color)
//update all
sys.getRange(1,2).setValue(mnths[mnthind])
sys.getRange(2,2).setValue(day)
}
我认为您不需要 google 应用程序脚本来执行此操作,只需使用条件格式
试试这个:
function updateCell() {
const color='#ff0000';
const def='#111111';//default color
const mnths=["Peylior","Memnor","Rollur","Uduir","Voan","Azzaz","Waap","Dustrem","Predco"];
const ss=SpreadsheetApp.getActive();
const sys=ss.getSheetByName("System");
var mnthind=mnths.indexOf(sys.getRange(1,2).getValue());//get current data before incrementing day
var sheet=ss.getSheetByName(mnths[mnthind]);//current month before change
var day=sys.getRange(2,2).getValue();//current day before change
day+=1;
if (day>40) {
day=1;
sheet.getRange(2,4,sheet.getLastRow()-1,1).setBackground(def);
if (mnthind==8) {
mnthindx=0;
sys.getRange(1,2).setValue(mnths[mnthind]);
}else{
mnthind+=1;
sys.getRange(1,2).setValue(mnths[mnthind])
}
}
sheet=ss.getSheetByName(mnths[mnthind]).getRange(2,4,sheet.getLastRow()-1,1).setBackground(def);//set column to default color
ss.getSheetByName(mnths[mnthind]).getRange(day+1,4).setBackground(color);//current day to selected color
sys.getRange(1,2).setValue(mnths[mnthind]); //save current day and month in sys
sys.getRange(2,2).setValue(day);
}
未测试。
代码存在一些问题。
第一个:
每次 运行 addTrigger()
都会在项目中添加一个新的触发器,因此请务必检查项目的触发器并删除重复的触发器,您可能不需要。
第二个:
您可能还想取消突出显示前一天,因此您可能希望将其编码。
第三名:
你的 if 赋值而不是比较。使用双等号 (==) 进行比较。
第四个:
您的日历有 9 个月而不是 12 个月,因此进行了调整。
示例:
function updateCell() {
var sheet = SpreadsheetApp.getActiveSpreadsheet()
//create mnths array
var mnths = [
"Peylior",
"Memnor",
"Rollur",
"Uduir",
"Voan",
"Azzaz",
"Waap",
"Dustrem",
"Predco"
]
//get "System"
var sys = sheet.getSheetByName("System")
//find the month
var mnthind = mnths.indexOf(sys.getRange(1,2).getValue())
//get day
var day = sys.getRange(2,2).getValue()
//remove the background of past day to color
sheet.getSheetByName(mnths[mnthind]).getRange(day+1,4,1,2).setBackground("#d9d9d9")
//add 1 to day
day += 1
//check if month is over
if (day > 40) {
//reset days
day = 1
//change month to next in array unless a year has passed
if (mnthind == 8) {mnthind = 0}
else{ mnthind++}
sys.getRange(1,2).setValue(mnths[mnthind])
}
//set the background of current day to color
sheet.getSheetByName(mnths[mnthind]).getRange(day+1,4,1,2).setBackground("yellow")
//update all
sys.getRange(1,2).setValue(mnths[mnthind])
sys.getRange(2,2).setValue(day)
}