使用基于下个月的名称创建一个新的 sheet
Create a new sheet with a name based on the next month
我有一个脚本可以创建一个新的 sheet,其名称基于月-年,例如 Oct-2017,每个新月自动创建一个。
但现在我想要一个按钮,我可以在其中创建具有相同结构的新 sheets,名称基于 MMM-yyyy。
我的第一个脚本仅在月份更改时创建一个新的 sheet,但现在我的意图是能够在我认为有必要时按下该按钮来创建它。如何创建按钮不是问题。
因此,如果 sheet 名称之前基于以下代码,
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;
}
现在代码需要使用 Sheet 名称作为新名称的参考,增加日期并遵守真实日历,因此如果当前 sheet 名称是 Dec-2017,该按钮将创建一个名为 Jan-2018 的新 sheet。所以不再需要像我以前的代码那样与新的 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);
}
这有意义吗?
谁能告诉我如何进行?
我没有包含任何错误处理(因此请确保活动 sheet 的名称格式为 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
我有一个脚本可以创建一个新的 sheet,其名称基于月-年,例如 Oct-2017,每个新月自动创建一个。
但现在我想要一个按钮,我可以在其中创建具有相同结构的新 sheets,名称基于 MMM-yyyy。
我的第一个脚本仅在月份更改时创建一个新的 sheet,但现在我的意图是能够在我认为有必要时按下该按钮来创建它。如何创建按钮不是问题。
因此,如果 sheet 名称之前基于以下代码,
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;
}
现在代码需要使用 Sheet 名称作为新名称的参考,增加日期并遵守真实日历,因此如果当前 sheet 名称是 Dec-2017,该按钮将创建一个名为 Jan-2018 的新 sheet。所以不再需要像我以前的代码那样与新的 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);
}
这有意义吗? 谁能告诉我如何进行?
我没有包含任何错误处理(因此请确保活动 sheet 的名称格式为 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