web-dev-qa-db-fra.com

Copier et coller automatiquement les cellules qui viennent d'être mises à jour dans une liste à partir de formulaires

J'ai un tableur qui recueille des informations sous deux formes différentes. Chaque formulaire alimente une feuille différente dans la feuille de calcul. Il y a 3 autres feuilles auxquelles l'information de l'un des deux premiers formulaires sera assignée. J'aimerais que quelques choses se passent, mais c'est vraiment la même fonction pour tout.

  1. J'en ai besoin pour regarder la liste des feuilles "entrantes" et pour copier et coller les lignes dans la dernière ligne d'une autre feuille en fonction de la valeur de la cellule de la colonne B (il s'agit de l'événement qui doit décider quand et où copier et coller l'information. ). Par exemple: si onEdit col B = Luke, puis copiez et collez la ligne dans la feuille "Luke"

  2. J'ai également besoin de remplir automatiquement un formulaire différent avec certaines valeurs de cellules si la colonne k dit "Oui".

J'ai actuellement une requête déplaçant les informations vers les feuilles, mais je dois ensuite copier et coller manuellement toutes les valeurs afin qu'elles puissent être mises à jour sur leurs feuilles respectives. Je suis novice en script et j'ai du mal à trouver les codes nécessaires et les variables dont ils ont besoin. J'ai remarqué que lorsque les utilisateurs utilisent onEdit, par exemple, ils définissent toujours var ss = getActiveSheet. Y at-il un endroit où je peux lire le fonctionnement de ces variables et leurs besoins?

2
Marshalls Best

C’est tout ce que j’ai eu jusqu’à ce que mon patron s’énerve que je l’enlève de temps en temps. Temps pour la V2, merci pour l'aide!

var ss = SpreadsheetApp.getActiveSpreadsheet();  
var s = ss.getActiveSheet();  
var r = s.getActiveRange();  
var c = s.getActiveCell();  
var aRow = r.getRow();  
var aCol = r.getColumn();  
var sampleCol = 17;  
var nameCol = 3;  
var statusCol = 2;  
var aSName = s.getName();  
Logger.log(ss.getEditors());  
Logger.log(aSName);  
Logger.log(aRow);  
Logger.log(aCol);  

//////////////////////////////////////////////////////////////////////////////  

function SampleFormUrl(U){  
  var colIndexU = U.range.getColumn();  
  var rowIndexU = U.range.getRow();  
  var daysSince = s.getRange(rowIndexU,25);  
  if( U.value == "Arrived" && colIndexU == sampleCol ){   
    daysSince.clear();   
  }else  
  {  if( U.value == "Send" && colIndexU == sampleCol ){   
    var formlinkCell = s.getRange(rowIndexU,26);   
    var forminfo = s.getRange(rowIndexU,5,1,7);  
    var formSheet = ss.getSheetByName("Data");  
    var formInput = formSheet.getRange(11,2,1,9);  
    forminfo.copyValuesToRange(formSheet, 2, 9, 12, 12);  
    var formUrlRange = formSheet.getRange(6,1);  
    var formUrlCell = formUrlRange.getCell(1,1).getValue();  
    formlinkCell.setValue(formUrlCell);  
    U.range.setValue("Sent");  
    daysSince.setValue(0);  
  }  
}  
}  

//  this code is for generating the URLs for prefilled sample Forms   
/////////////////////////////////////////////////////////////////  
// This is for website lead submission movement handling   

 function websiteSubmit(W){  
  if( s.getName() == "External"){   
    Logger.log("External")  
    Logger.log(s.getName());  
    var rowIndexW = W.range.getRow();  
    var nameIt = "WebForm";  
    Logger.log(nameIt);  
    var leadRange = s.getRange(rowIndexW,1,1,24);  
    var targetPage = ss.getSheetByName(nameIt);  
       Logger.log(targetPage);  
    var lastRow = targetPage.getLastRow();   
       targetPage.insertRowAfter(lastRow);  
    leadRange.copyValuesToRange(targetPage,1,24,lastRow+1,lastRow+1);  
    var setRow = targetPage.getLastRow();  
    targetPage.getRange(setRow,statusCol).setValue("Even");  
    targetPage.getRange(setRow,4).setValue("LEJ WebForm");  
  }else  
       if(aSName == "Internal"){  
    var nameIt = s.getRange(aRow,nameCol).getValue();  
    Logger.log(nameIt);  
    var leadRange = s.getRange(aRow,1,1,24);  
    var targetPage = ss.getSheetByName(nameIt);  
    var lastRow = targetPage.getLastRow();  
    targetPage.insertRowAfter(lastRow);  
    leadRange.copyValuesToRange(targetPage,1,24,lastRow+1,lastRow+1);  
    }  
  }  

// This is for website lead submission movement handling   
////////////////////////////////////////////////////////////////  
// This is the code for moving the info between lead sheets.  

function leadProcessing(P){  
 if(nameCol == P.range.getColumnIndex()){   
   . Logger.log("Lead Processing");  
    var rowIndex = P.range.getRowIndex();  
    var nameIt = s.getRange(rowIndex,nameCol).getValue();  
    if (nameIt =="Open"||"Karim"||"Luke"||"James"||"Taryn"||"Wayne"||"Internal")  {  
      Logger.log(nameIt);  
      var leadRange = s.getRange(rowIndex,1,1,24);  
      var targetPage = ss.getSheetByName(nameIt);  
      var lastRow = targetPage.getLastRow();  
      if(ss.getSheetName() != targetPage.getSheetName()){  
      .  targetPage.insertRowAfter(lastRow);  
        leadRange.copyValuesToRange(targetPage,1,24,lastRow+1,lastRow+1);   
        var sheetChk = ss.getSheetByName("Internal");  
        var webSheeChk = ss.getSheetByName("External");  
        if(s.getSheetName() != sheetChk.getSheetName() &&  s.getSheetName() !webSheeChk.getSheetName()){  
          s.deleteRow(rowIndex);  
          var email = Session.getActiveUser().getEmail();  
          Logger.log(email);  
          var scriptProperties = PropertiesService.getScriptProperties();  
          scriptProperties.setProperties({  
            'Luke': 'Luke@com',  
            'James': 'Jamem@com',  
            'Taryn': 'Taryna@com',  
            'Wayne': 'Wayne@com',  
            'Karim': 'Karim'  
          });   
          var Email = scriptProperties.getProperty(nameIt);  
          Logger.log(Email);  
          var message = "Check your leads page you've been assigned a lead!";  
          var subject = "New Lead Assigned to you ! ";  
          GmailApp.sendEmail(Email, subject, message);  
          SpreadsheetApp.flush();  
        }  
      }   
    }   
  }     
}   
// T his is the code for moving the info between lead sheets. 
////////////////////////////////////////////////////////////  
// This is for Assigning Closed Accounts to the Accounts Manager  

function leadAssignment(A){    
if(statusCol == A.range.getColumn()&& A.value == "Assign"){  
    Logger.log("LeadAssignment")  
    var rowIndex = A.range.getRow();    
    var nameIt = A.getRange(rowIndex,nameCol).getValue();  
    var leadRange = s.getRange(rowIndex,1,1,24);  
    var targetPage = ss.getSheetByName(nameIt+"s Acct");  
    var lastRow = targetPage.getLastRow();  
    targetPage.insertRowAfter(lastRow);  
    leadRange.copyValuesToRange(targetPage,1,24,lastRow+1,lastRow+1);   
    if(s.getSheetName() != targetPage.getSheetName()){  
      s.deleteRow(rowIndex);  
    }  
  }  
}  
//  This is for Assigning Closed Accounts to the Accounts Manager  
////////////////////////////////////////////////////////////////  
// This moves product to territory page  

function leadConflict(C){  
 if(statusCol ==  s.getActiveRange().getColumn()){  
   Logger.log("Lead Conflict");  
    var rowIndex = s.getActiveRange().getRow();  
    var nameIt = s.getRange(rowIndex,statusCol).getValue();  
    var leadRange = s.getRange(rowIndex,1,1,24);  
    var targetPage = ss.getSheetByName(nameIt);  
    var lastRow = targetPage.getLastRow();  
    if(s.getSheetName() != targetPage.getSheetName()){  
      targetPage.insertRowAfter(lastRow);  
      leadRange.copyValuesToRange(targetPage,1,24,lastRow+1,lastRow+1);  
      s.deleteRow(rowIndex);  
    }  
  }  
}   

// This is for Assigning Closed Accounts to the Accounts Manager 
////////////////////////////////////////////////////////////////  
// This is for Applying a tiume stamp for edit to specific columns   

function timeStamp(T){  
  var Colindex = aCol;  
     var row = T.range.getRow();  
  if( row > 2 && Colindex == 2||4||5||6||7||8||9||10||11||12||13||14||15||16||17||18||19||20||21){ //checks   the column  
  >>  var time = new Date();  
    ss.getRange('W' + row.toString()).setValue(time);  
    ss.getRange('X' + row.toString()).setValue(0);  
  }  
}  

// This is for Applying a tiume stamp for edit to specific columns   
///////////////////////////////////////////////////////////////////  
// Email handler   
0
Marshalls Best

Vous avez besoin de onFormSubmit, pas de onEdit. Ouvrez le documentation des classes Tableur, Feuille et Plage et recherchez chacune des méthodes utilisées ci-dessous. Pour vous donner une idée générale de ce qui se fait ici:

  1. ss = feuille de calcul active, feuille = feuille active
  2. values ​​= un tableau de valeurs dans la feuille active. Notez que les tableaux en JavaScript sont indexés sur 0.
  3. row = la ligne ajoutée à la feuille lorsque l'événement onFormSubmit s'est produit. Celui-ci est basé sur 1, donc l'ajustement ligne-1 est utilisé pour l'adressage de tableaux.
  4. values ​​[row-1] [1] - la valeur dans la colonne B de cette ligne. [Numéro de ligne] [Numéro de colonne] dans l'indexation basée sur 0.

Le script n'est pas parfait. D'une part, cela suppose que la cible a des lignes disponibles. Vous voudrez peut-être utiliser insertRowAfter () pour plus de sécurité. Ou créez simplement beaucoup de lignes. La logique pour d'autres choses que vous avez mentionnées n'est pas ici non plus, mais c'est essentiellement la même chose.

function onFormSubmit(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var values = sheet.getDataRange().getValues();
  var row = event.range.getRow();
  if (values[row-1][1] == 'Luke') {   // column B in 0-based indexing 
    var targetSheet = ss.getSheetByName('for Luke');
    var lastRow = targetSheet.getLastRow();
    var targetRange = targetSheet.getRange(lastRow+1, 1, 1, values[0].length);
    targetRange.setValues([values[row-1]]);
  }   
}
1
user79865