2017-10-04 1 views
0

Ich habe ein Skript, das ein neues Blatt mit einem Namen basierend auf Monat, wie Oktober 2017, automatisch jeden neuen Monat erstellt. Aber jetzt möchte ich einen Buttom haben, wo ich neue Blätter mit der gleichen Struktur erstellen kann, mit Namen basierend auf dem MMM-JJJJ. Mein erstes Skript erstellt nur dann ein neues Blatt, wenn sich der Monat ändert, aber jetzt möchte ich es erstellen können, wenn ich es für notwendig halte, indem ich diesen Knopf drücke. Das Erstellen eines Buttons ist kein Problem.Erstellen Sie ein neues Blatt mit einem Namen basierend auf dem nächsten Monat

Also, wenn vor dem Blattname auf dem folgenden Code basiert,

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

jetzt muss der Code den Blattnamen als Referenz für den neuen Namen, das Datum zu erhöhen und einen echten Kalender respektiert Wenn also der aktuelle Blattname Dez-2017 lautet, wird auf der Schaltfläche ein neues Blatt namens Jan-2018 erstellt. Es ist also nicht mehr nötig, wie mein vorheriger Code mit dem neuen Date-Befehl zu tun zu haben.

begann ich einen neuen Code, aber ich weiß nicht, wie die var nameOfNextMonth zu erstellen:

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

das Sinn machen Is? Kann mir jemand eine Idee geben, wie ich vorgehen soll? Dank

Antwort

0

funktioniert können Sie nächste Monate Namen erhalten Durch die Verwendung des Standards new Date() wird die Erhöhung auf das entsprechende Jahr und die Anpassung an den entsprechenden Monat durchgeführt.

Stellen Sie außerdem sicher, wenn das Arbeitsblatt bereits mit diesem Namen zu überprüfen oder nicht

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 
+0

Hey Parag Jadhav, danke. Es funktioniert gut! –

+0

@DanielSian Froh, um Hilfe zu sein :) Bitte akzeptieren Sie es als Antwort, wenn es für Sie arbeitet. –

+0

Wie kann ich es tun? –

0

I enthalten keine Fehlerbehandlung (so stellen Sie sicher, dass das aktive Blatt hat einen Namen mit dem Format mmm-yyyy), aber sehen, ob diese

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

existiert schafft es ein Blatt Jan-1970 genannt, als, Feb-1970 Mar-1970 ... Wie auch immer, danke für Ihre Hilfe. –

+0

Funktioniert gut für mich. Ich werde mich freuen, wenn Sie eine Kopie Ihrer Tabelle freigeben können. – JPV

+0

Sicher! Hier ist die Tabelle: https://docs.google.com/spreadsheets/d/1GO0U7RBe9ZQJ69YUchSnCKyDC8VSvWRW5VkU6iZjOMQ/edit?usp=sharing Danke –

Verwandte Themen