基于Google表格中下拉值的单元格的移动(复制)值

问题描述:

我试图使用Google表格创建基本CRM,该表格将所有客户端的数据保存在一张表中,并显示它们处于交易阶段的哪个部分在另一张纸上。下面是我的意思的一个例子。基于Google表格中下拉值的单元格的移动(复制)值

表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 

第2页:

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

我期待创建下拉细胞触发任何项目onEdit的脚本。这是可能的,什么是最干净的方式?

我已经创建了这个Example Sheet其中只包括有问题的功能。

再试一次。

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表:

enter image description here

DealStage表:

enter image description here

验证表:

enter image description here

+0

感谢您的建议@Cooper。但是,只有将交易阶段设置为单个工作表时,该解决方案才有效。在这种情况下,这是行不通的。我需要保留表1中的所有数据,并使用表2来表示“姓名”所在的“交易阶段”。 – Bbrads