我试图为我的google工作表创建一个on open脚本函数。打开文档时,我希望工作表打开当前月份选项卡。但是,我的工作表并没有标注月份,而是标注了我们的工资核算日期。不知道如何纠正我的配方。
这是我正在使用的脚本:
/**
* Selects a monthly sheet
*/
function onOpen() {
var monthTabs = [ "Master", "Sick Summary", "Extra Hour Summary", "Sep15-
30", "Oct1-15", "Oct15-26", "Nov1-15", "Nov15-30", "Dec1-15",
"Dec15-31", "Jan1-15", "Jan15-31", "Feb1-15", "Feb15-28", "Mar1-15",
"Mar15-31", "Apr1-15", "Apr15-30", "May1-15", "May15-31", "Jun1-15",
"Jun15-30" ];
var month = (new Date()).getMonth();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(monthTabs[month]);
ss.setActiveSheet(sheet);
};
这些是我标签的标签:
Master,Sick Summary,Extra Hour Summary,Sep 15-30,Oct1-15,Oct15-26,Nov1-15,Nov15-30,Dec1-15,Dec15-31,Jan 1-15,1 Jan 15-31,Feb1- 15,2月15日至28日,3月1日至15日,3月15日至31日,4月1日至15日,4月15日至30日,5月1日至15日,5月15日至31日,6月1日至15日,6月15日至30日
我想知道是否需要更改工作表的标签,或者是否需要在我的脚本中包含日期规范?
答案 0 :(得分:1)
您需要像这样修改代码:
function onOpen() {
var monthConv = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
var month = monthConv[(new Date()).getMonth()];
Logger.log(month)
var ss = SpreadsheetApp.getActiveSpreadsheet();
var MonthTabs = ss.getSheets()
for(var i = 0; i< MonthTabs.length ; i++){
var shtName = MonthTabs[i].getName()
Logger.log(shtName.substr(0,3))
if(shtName.substr(0,3) == month){
Logger.log("Tab selected")
if((new Date()).getDate()<15){
ss.setActiveSheet(MonthTabs[i])
} else {
ss.setActiveSheet(MonthTabs[i+1])
}
break;
}
}
};
首先,您需要将月份转换为三个字母的代码。
var monthConv = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
var month = monthConv[(new Date()).getMonth()];
然后,您需要提取工作表名称的前三个字母,并将其与当前三个字母的月份代码进行比较
var shtName = MonthTabs[i].getName()
Logger.log(shtName.substr(0,3))
if(shtName.substr(0,3) == month){
找到匹配项后,根据当前日期选择匹配的第一张图纸或其后的图纸。
if((new Date()).getDate()<15){
ss.setActiveSheet(MonthTabs[i])
} else {
ss.setActiveSheet(MonthTabs[i+1])
}
这假设纸张是根据月份和日期订购的。因此,如果当前日期超过15,则选择下一个工作表。
希望有所帮助。