Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于下个月创建一个名称为的新工作表_Javascript_Google Sheets_Google Sheets Api - Fatal编程技术网

Javascript 基于下个月创建一个名称为的新工作表

Javascript 基于下个月创建一个名称为的新工作表,javascript,google-sheets,google-sheets-api,Javascript,Google Sheets,Google Sheets Api,我有一个脚本,它会根据月份和年份(如2017年10月)自动创建一个新的工作表,并在每个新的月份自动命名 但现在我想有一个按钮,在这里我可以创建具有相同结构的新工作表,其名称基于MMM-yyy 我的第一个脚本只在月份发生变化时创建一个新的工作表,但现在我的目的是在我判断有必要时按下该按钮来创建它。如何创建按钮不是问题 因此,如果图纸名称之前基于以下代码 function checkSheetName() { var ss = SpreadsheetApp.getActiveSpreadshee

我有一个脚本,它会根据月份和年份(如2017年10月)自动创建一个新的工作表,并在每个新的月份自动命名

但现在我想有一个按钮,在这里我可以创建具有相同结构的新工作表,其名称基于MMM-yyy

我的第一个脚本只在月份发生变化时创建一个新的工作表,但现在我的目的是在我判断有必要时按下该按钮来创建它。如何创建按钮不是问题

因此,如果图纸名称之前基于以下代码

function checkSheetName() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = formatDate(); // load the current 'Month-Year'

  try {
    ss.setActiveSheet(ss.getSheetByName(sheetName)); // try to set 'sheetName' as active sheet
  } catch (e) { // if returns error,
    createNewMonthSheet(); // creates a new sheet
  }

function createNewMonthSheet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = formatDate(); // load the current 'Month-Year'  
  ss.insertSheet(sheetName, 2); // creates a new sheet on the left side, after 2 existing sheets
}

function formatDate() {
  var monthNames = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
  var monthNumber = Utilities.formatDate(new Date(), 'GMT+12:00', "M");
  var yearNumber = Utilities.formatDate(new Date(), 'GMT+12:00', "yyyy");
  return monthNames[monthNumber-1]+'-'+yearNumber; 
}
现在,代码需要使用工作表名称作为新名称的参考,增加日期并遵循真实日历,因此如果当前工作表名称为2017年12月,则按钮将创建一个名为2018年1月的新工作表。因此,不再需要像我以前的代码那样与新的Date命令相关

我启动了一个新代码,但我不知道如何创建var
nameonfextmonth

function createNewSheet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var currentMonth = ss.getActiveSheet().getName();
  var nameOfNextMonth = **[currentMonth+1]**;
  ss.setActiveSheet(ss.getSheetByName("template"));
  var newSheet = ss.duplicateActiveSheet();
  newSheet.activate();
  ss.moveActiveSheet(0);
  newSheet.setName(nameOfNextMonth);
}
这有意义吗?
有人能告诉我如何继续吗?

我没有包含任何错误处理(因此请确保活动工作表的名称格式为mmm yyyy),但请查看这是否有效

function createNewSheet() {
var monthNames = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
var ss = SpreadsheetApp.getActiveSpreadsheet();
var curMonth = ss.getActiveSheet().getName().split("-")
var nextMonth = new Date(curMonth[1], monthNames.indexOf(curMonth[0])+1, 1);
var name = Utilities.formatDate(nextMonth, 'GMT+12:00', "MMM-yyyy")
ss.setActiveSheet(ss.getSheetByName("template"));
if(!ss.getSheetByName(name)){    
ss.duplicateActiveSheet().activate().setName(name)
ss.moveActiveSheet(0);
}
}

您可以使用standard获得下一个月的名称,它将处理递增到适当的年份和修改到适当的月份

此外,请确保检查该名称的工作表是否已存在

function createWorksheet()
{
  var monthNames = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  var monthsToAdd = 1;
  var currentDate = new Date();
  currentDate.setMonth(currentDate.getMonth() + monthsToAdd);

  var sheetName = monthNames[currentDate.getMonth()]+"-"+currentDate.getFullYear();
  var sheetsArray = spreadsheet.getSheets();
  var creationFlag = false;
  //Logger.log(sheetsArray)
  for(var itr in sheetsArray)
  {
    if(sheetsArray[itr].getSheetName() == sheetName)
    {
      creationFlag = false;
      break;
    }
    else
      creationFlag = true;
  }

  if(creationFlag)
    spreadsheet.insertSheet(sheetName);

  if(!creationFlag)
    Logger.log("Worksheet Exists");
}//createWorksheet

它创建了一个名为Jan-1970、than、Feb-1970、Mar-1970的图纸。。。不管怎样,谢谢你的帮助。对我来说很好。如果你能分享一份电子表格的话,我很乐意调查一下。当然!这是电子表格:谢谢,我很好。重要的是确保活动工作表的名称格式为MMM yyyy。然后脚本将处理该日期并添加一个月。我将选项卡名称更改为2017年1月,运行脚本并创建了2017年2月。@DanielSian很高兴能为您提供帮助:)如果它对您有效,请接受它作为答案。我怎么做?