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