我在文档上运行了以下脚本(我在论坛上找到了该脚本,但不幸的是,我不记得要归功于谁,但效果很好),将整个行数据提取到新表中,然后从它的当前位置;
function onEdit(event)
{
// assumes source data in sheet named Schedule
// target sheet of move to named Invoiced
// test column with "9 - Invoiced" is col 1
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "AllOpps" && r.getColumn() == 1 && r.getValue() ==
"Outreached")
{
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("InitialOutreach");
if(targetSheet.getLastRow()+1 == targetSheet.getMaxRows())
{
targetSheet.insertRowsAfter(targetSheet.getLastRow(), 5);
//inserts 5 rows after last used row
}
var target = targetSheet.getRange(targetSheet.getLastRow()+1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
我正在寻找的是对此的修正,并且我不知道如何使它起作用,因为我的脚本知识非常有限,实际上,我什至不确定是否可以,但是可以。
在选择“外联”后,我希望该行做两件事,首先是将整行复制到“ InitialOutreach”选项卡,就像现在一样,同时将其复制到“ 11,12,13”列和14要复制到一个完全不同的文档中,为了易于使用,我将其添加为共享示例文档中的Mail。第二个副本将需要放入分别命名的列中
您可以在此处找到样本表。请注意,AllOpps和初始外联在同一文档中,代表初始传输,而“邮件合并”选项卡将是第二次传输。再次第二次转移即。只有选择的列将在完全不同的文档中。 https://docs.google.com/spreadsheets/d/1x_NFLXC2doWAgCWcAbxpuAh1vW-IclMZ1prN4loWdDA/edit?usp=sharing。
我希望这很清楚。再一次,我什至不能确定是否可以在1个触发器上运行2个不同的任务,但是我们不胜感激。 最好, J
答案 0 :(得分:0)
注意::此答复已从以前的版本进行了修改,以处理OP报告的各种更改和问题。
下面的代码应满足您的需求。请仔细注意已更改的函数名称easy_install pip==18.* ### installing the latest version pip
,该名称也出现在easy_install pip==9.0.1
easy_install --upgrade pip
事件中,该事件被命名为“可安装”触发器。有关原因,请参阅后面的注释。
myOnEdit
1)为邮件合并行创建新的目标电子表格,并创建一个名为“邮件合并”的新标签。制作
2)要查找新表的ID,请打开它并查看URL。它看起来应该像这样: https://docs.google.com/spreadsheets/d/ 14NP6TUyj1xLCPjKsPdGS6fiO0Bvzv1u4696LFd3tA7I / edit#gid = 0
ID是加粗的位,即上面的示例中的onOpen
。您的将有所不同,因此复制并粘贴它,使您的代码行如下所示:
function onOpen() {
ScriptApp.newTrigger('myOnEdit')
.onEdit()
.create();
}
function myOnEdit(event)
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "AllOpps" && r.getColumn() == 1 && r.getValue() == "Outreached")
{
var row = r.getRow();
var numColumns = s.getLastColumn();
// first copy and paste the "Outreached" row in entrity
var targetSheet = ss.getSheetByName("InitialOutreach");
if(targetSheet.getLastRow()+1 == targetSheet.getMaxRows())
{
targetSheet.insertRowsAfter(targetSheet.getLastRow(), 5);
//inserts 5 rows after last used row
}
var target = targetSheet.getRange(targetSheet.getLastRow()+1, 1);
var values = s.getRange(row, 11, 1, 5).getValues(); // save the values to copy to "mail Merge"
s.getRange(row, 1, 1, numColumns).moveTo(target);
Logger.log(values);
// Copy the required columns to "Mail Merge" spreadsheet"
var mailMergeSS= SpreadsheetApp.openById('--copy your sheet ID here--');
targetSheet = mailMergeSS.getSheetByName("Mail Merge");
if(targetSheet.getLastRow()+1 == targetSheet.getMaxRows())
{
targetSheet.insertRowsAfter(targetSheet.getLastRow(), 5);
//inserts 5 rows after last used row
}
target = targetSheet.getRange(targetSheet.getLastRow()+1,1,1,5);
target.setValues(values);
s.deleteRow(row);
}
}
为避免此错误:
尝试打开外部工作表时出现的SpreadsheetApp.openById([0AjqSnE_p3nFqdDN0LWpFbjFqVDRwNmFGOV91QzZrZc]) [0秒]执行失败:您无权执行 该动作。
..,需要使用“可安装的触发器”。适当的参考资料在这里:
www.developers.google.com/apps-script/guides/triggers/installable
developers.google.com/apps-script/guides/triggers/events
可以通过两种方式安装可安装的触发器:
14NP6TUyj1xLCPjKsPdGS6fiO0Bvzv1u4696LFd3tA7I
并选择“当前”
项目触发器。添加具有如下设置的新触发器:选择
要运行的功能:var mailMergeSS= SpreadsheetApp.openById('14NP6TUyj1xLCPjKsPdGS6fiO0Bvzv1u4696LFd3tA7I');
在部署时运行的功能:script editor
选择事件来源:myOnEdit
选择
事件类型:head
然后保存并重新启动工作表。 from Spreadsheet