2017-03-14 2 views
1

J'ai reçu ces deux scripts de messages différents, et j'ai de la difficulté à les fusionner.Combinez deux scripts en un seul. Google Sheet

Le script court insère un horodatage si la colonne d'état change dans Feuille1 et l'autre script crée un journal des modifications qui consigne les modifications effectuées. Est-il possible de fusionner ces deux en un, et peut-être éditer le changelog juste pour enregistrer quand la colonne d'état est éditée?

Merci d'avance!

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

script TimeStamp:

`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()]); 
} 

Répondre

0

Essayez de renommer vos fonctions et ajouter un seul onEdit:

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