2017-06-05 7 views
0

Ich versuche, ein grundlegendes CRM mit Google Tabellen zu erstellen, die alle Daten des Kunden in einem Blatt enthält und zeigt, welcher Teil der Deal-Phase sie sind auf einem anderen Blatt. Unten ist ein Beispiel dafür, was ich meine.Verschieben (Kopieren) Wert einer Zelle basierend auf Dropdown-Wert in Google Tabellen

Blatt 1:

Name | Email | Deal Stage | 
Ian  [email protected] >>Pre-launch << dropdown list 
Ken  [email protected] >>Pre-launch << dropdown list 
Dan  [email protected] >>Out-Reach << dropdown list 
Ben  [email protected] >>Call Booked<< dropdown list 

Blatt 2:

Pre-Launch | Out-Reach | Brochure Sent | Call Booked | 
Ian   Dan       Ben 
Ken 

Ich suche ein Skript zu erstellen, die onEdit jedes Element in der Dropdown-Zellen ausgelöst wird. Ist das möglich und was ist der sauberste Weg?

Ich habe diese Example Sheet erstellt, die nur die betreffende Funktion enthält.

Antwort

0

Noch ein Versuch.

function dealStage(e) 
{ 
    //var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var ss = e.source; 
    var sht = ss.getSheetByName('ClientData'); 
    var rng = sht.getDataRange(); 
    var rngA = rng.getValues(); 
    var clientheaders = rngA[0]; 
    var dsSht = ss.getSheetByName('DealStage'); 
    var dsShtRng = dsSht.getRange(2, 1, dsSht.getLastRow(), dsSht.getLastColumn()); 
    dsShtRng.clearContent(); 
    var dsShtHdrsRng = dsSht.getRange(1, 1, 1, dsSht.getLastColumn()); 
    var dsShtHdrsRngA = dsShtHdrsRng.getValues(); 
    var dsheaders = dsShtHdrsRngA[0]; 
    var prelaunch = []; 
    var outreach = []; 
    var brochuresent = []; 
    var callbooked = []; 
    var dsi = clientheaders.indexOf('Deal Stage'); 
    var ni = clientheaders.indexOf('Name'); 
    for(var i=1;i<rngA.length;i++) 
    { 

    var dsv = rngA[i][dsi]; 
    var nv = rngA[i][ni] 
    if(dsv!='') 
    { 
     switch(dsv) 
     { 
      case('Pre-Launch'): 
      prelaunch.push([nv]); 
      break; 
      case('Out-Reach'): 
      outreach.push([nv]); 
      break; 
      case('Brochure-Sent'): 
      brochuresent.push([nv]); 
      break; 
      case('Call-Booked'): 
      callbooked.push([nv]); 
      break; 
     } 
    } 
    } 
    var dsstartrow = dsSht.getLastRow()+1; 
    for(var i=0;i<dsheaders.length;i++) 
    { 
    var hdr = dsheaders[i]; 
    switch(hdr) 
    { 
     case('Pre-Launch'): 
     if(prelaunch.length>0)dsSht.getRange(dsstartrow,i+1,prelaunch.length,1).setValues(prelaunch); 
     break; 
     case('Out-Reach'): 
     if(outreach.length>0)dsSht.getRange(dsstartrow,i+1,outreach.length,1).setValues(outreach); 
     break; 
     case('Brochure-Sent'): 
     if(brochuresent.length>0)dsSht.getRange(dsstartrow,i+1,brochuresent.length,1).setValues(brochuresent); 
     break; 
     case('Call-Booked'): 
     if(callbooked.length>0)dsSht.getRange(dsstartrow,i+1,callbooked.length,1).setValues(callbooked); 
     break; 
    } 
    } 
    SpreadsheetApp.flush(); 
} 

Clientdata Blatt:

enter image description here

DealStag Blatt:

enter image description here

Validation Blatt:

enter image description here

+0

Danke für Ihren Vorschlag @ Cooper. Diese Lösung funktioniert jedoch nur, wenn die "Deal Stage (s)" als einzelne Blätter eingerichtet sind. In diesem Fall wird das nicht funktionieren. Ich muss alle Daten in Blatt 1 behalten und Blatt 2 verwenden, um darzustellen, um welche "Deal-Phase" es sich bei einer Person namens "Name" handelt. – Bbrads

Verwandte Themen