Google apps script 基于Google工作表中的下拉值移动(复制)单元格值
我正在尝试使用GoogleSheets创建一个基本的CRM,它将所有客户的数据保存在一张表中,并在另一张表中显示他们处于交易阶段的哪一部分。下面是我的意思的一个例子 第1页:Google apps script 基于Google工作表中的下拉值移动(复制)单元格值,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在尝试使用GoogleSheets创建一个基本的CRM,它将所有客户的数据保存在一张表中,并在另一张表中显示他们处于交易阶段的哪一部分。下面是我的意思的一个例子 第1页: Name | Email | Deal Stage | Ian ian@.. >>Pre-launch << dropdown list Ken ken@.. >>Pre-launch << dropdown list Dan dan@.
Name | Email | Deal Stage |
Ian ian@.. >>Pre-launch << dropdown list
Ken ken@.. >>Pre-launch << dropdown list
Dan dan@.. >>Out-Reach << dropdown list
Ben ben@.. >>Call Booked<< dropdown list
我希望创建一个脚本,它可以在下拉单元格中激发任何项的onEdit
。这可能吗?最干净的方法是什么
我已经创建了这个功能,它只包含有问题的功能 再试一次
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();
}
功能解除阶段(e)
{
//var ss=SpreadsheetApp.getActiveSpreadsheet();
var ss=e.来源;
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 dsshththdhrsrng=dsSht.getRange(1,1,1,dsSht.getLastColumn());
var dsshththdrsrnga=dsshthththdrsrng.getValues();
var dsheaders=dsshththdrsrnga[0];
var预启动=[];
var=[];
var手册当前=[];
var callbook=[];
var dsi=clientheaders.indexOf(“交易阶段”);
var ni=clientheaders.indexOf('Name');
对于(var i=1;i0)dsSht.getRange(dsstartrow,i+1,outapping.length,1)。设置值(outapping);
打破
案例(“宣传册已发送”):
如果(画册呈现长度>0)dsSht.getRange(dsstartrow,i+1,画册呈现长度,1).SetValue(画册呈现);
打破
案例(“电话预约”):
如果(callbooked.length>0)dsSht.getRange(dsstartrow,i+1,callbooked.length,1).setValues(callbooked);
打破
}
}
SpreadsheetApp.flush();
}
客户资料表:
阶段表:
验证表:
谢谢你的建议@Cooper。但是,只有将
交易阶段设置为单独的工作表时,此解决方案才有效。在这种情况下,这是行不通的。我需要将所有数据保存在表1中,并使用表2表示一个人的姓名所处的交易阶段。
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();
}