簡體   English   中英

創建一個新的工作表,其名稱基於下個月

[英]Create a new sheet with a name based on the next month

我有一個腳本,該腳本會在每個新月自動基於月年份創建一個新工作表,例如2017年10月。

但是現在我想要一個按鈕,可以在其中創建具有相同結構,名稱基於MMM-yyyy的新工作表。

我的第一個腳本僅在月份改變時才創建一個新工作表,但是現在我的意圖是能夠在我認為有必要時通過按下該按鈕來創建該工作表。 如何創建按鈕不是問題。

因此,如果工作表名稱之前是基於以下代碼的,

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; 
}

現在代碼需要使用工作表名稱作為新名稱的參考,增加日期並遵守實際日歷,因此,如果當前工作表名稱為Dec-2017,則按鈕將創建一個名為Jan-2018的新工作表。 因此,不再需要像以前的代碼那樣與新的Date命令相關。

我開始了一個新代碼,但是我不知道如何創建var nameOfNextMonth

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);
}
}

您可以使用標准的new Date()獲得下個月的名稱,它將處理遞增到適當的年份,並修改成適當的月份。

另外,請確保檢查該名稱的工作表是否已經存在

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM