将整个行移至新标签页,然后将所选列移至其他文档的脚本

时间:2018-11-11 23:10:38

标签: google-apps-script google-sheets

我在文档上运行了以下脚本(我在论坛上找到了该脚本,但不幸的是,我不记得要归功于谁,但效果很好),将整个行数据提取到新表中,然后从它的当前位置;

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

1 个答案:

答案 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

可以通过两种方式安装可安装的触发器:

  1. 在您的CopyCols工作表中,转到14NP6TUyj1xLCPjKsPdGS6fiO0Bvzv1u4696LFd3tA7I并选择“当前” 项目触发器。添加具有如下设置的新触发器:选择 要运行的功能:var mailMergeSS= SpreadsheetApp.openById('14NP6TUyj1xLCPjKsPdGS6fiO0Bvzv1u4696LFd3tA7I'); 在部署时运行的功能:
    script editor选择事件来源:myOnEdit选择 事件类型:head然后保存并重新启动工作表。
  2. 或....在您的代码中添加以下功能行:

from Spreadsheet