2017-03-14 3 views
1

Ich habe diese zwei Skripts aus verschiedenen Posts, und ich habe Probleme beim Zusammenführen von ihnen.Kombinieren Sie zwei Skripte in einem Google Sheet

Das Kurzskript fügt einen Zeitstempel ein, wenn sich die Statusspalte in Sheet1 ändert, und das andere Skript erstellt ein Änderungsprotokoll, in dem die vorgenommenen Änderungen protokolliert werden. Ist es möglich, diese beiden zu einem zusammenzufassen und vielleicht das Änderungsprotokoll so zu bearbeiten, dass es nur aufzeichnet, wenn die Statusspalte bearbeitet wird?

Vielen Dank im Voraus!

Google-Tabelle: https://docs.google.com/spreadsheets/d/1m61JTFIacGifU-UD9yIzXdhAYKiiZHN3PooyifRHVf0/edit?usp=sharing

Timestamp-Skript:

`function onEdit(e) { 
    var sheet = e.source.getActiveSheet(); 
    if (sheet.getName() == "Sheet1") { 
    var r = e.source.getActiveRange(); 
    if (r.getColumn() == 3) { 
     sheet.getRange(r.getRow(),r.getColumn()+1).setValue(new Date()); 
    } 
    } 
} 

`

ChangeLog Script:

function onEdit() { 
    // This script records changes to the spreadsheet on a "Changelog" sheet. 
    // The changelog includes these columns: 
    // "Timestamp", "Sheet name", "Cell address", "Column label", "Row label", "Value entered" 
    // Version 1.1, written by --Hyde, 30 July 2014 
    // See https://productforums.google.com/d/topic/docs/7CaJ_nYfLnM/discussion 

    // edit the following lines to suit your needs 
    // changes are only recorded from sheets listed below 
    // escape regular expression metacharacters as in \. \$ \+ \* \? \(\) \[ \] 
    // see http://en.wikipedia.org/wiki/Regular_expression 
    // use '.+' to include all sheets 
    var sheetsToWatch = ['outcome overview', 'Sheet1', 'Another sheet']; 
    // name of the sheet where the changelog is stored 
    var changelogSheetName = "Changelog"; 

    var timestamp = new Date(); 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    var cell = sheet.getActiveCell(); 
    var sheetName = sheet.getName(); 

    // if it is the changelog sheet that is being edited, do not record the change 
    if (sheetName == changelogSheetName) return; 

    // if the sheet name does not appear in sheetsToWatch, do not record the change 
    var matchFound = false; 
    for (var i = 0; i < sheetsToWatch.length; i++) { 
    if (sheetName.match(sheetsToWatch[i])) matchFound = true; 
    } 
    if (!matchFound) return; 

    var columnLabel = sheet.getRange(/* row 1 */ 1, cell.getColumn()).getValue(); 
    var rowLabel = sheet.getRange(cell.getRow(), /* column A */ 1).getValue(); 

    var changelogSheet = ss.getSheetByName(changelogSheetName); 
    if (!changelogSheet) { 
    // no changelog sheet found, create it as the last sheet in the spreadsheet 
    changelogSheet = ss.insertSheet(changelogSheetName, ss.getNumSheets()); 
    // Utilities.sleep(2000); // give time for the new sheet to render before going back 
    // ss.setActiveSheet(sheet); 
    changelogSheet.appendRow(["Timestamp", "Sheet name", "Cell address", "Column label", "Row label", "Value entered"]); 
    changelogSheet.setFrozenRows(1); 
    } 
    changelogSheet.appendRow([timestamp, sheetName, cell.getA1Notation(), columnLabel, rowLabel, cell.getValue()]); 
} 

Antwort

0

Versuchen Sie, Ihre Funktionen umbenennen und fügen Sie nur eine onEdit:

function onEdit(e) { 
    myFunction1(e); // call function #1 
    myFunction2(); // call function #2 
} 
Verwandte Themen