关于打开脚本错误

时间:2017-12-15 16:40:39

标签: google-apps-script google-sheets

我试图为我的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日

我想知道是否需要更改工作表的标签,或者是否需要在我的脚本中包含日期规范?

1 个答案:

答案 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,则选择下一个工作表。

希望有所帮助。