用于创建电子表格的副本,重命名,然后重置电子表格的Google Apps脚本

时间:2017-02-23 06:52:49

标签: google-apps-script

我设计了一个电子表格来跟踪企业中系统的状态。 它每12小时更新一次,然后根据日期和报告编号手动重命名,然后归档。

我创建了一个脚本,允许用户通过按下图形来创建当前电子表格的副本

function copyDocs() {
  for(i=0; i<1; i++){
  var drive=DriveApp.getFileById('190X72ZGwHtKaUa5MQerlW2k1ops-zYTnr1UXwuweJxGY');
  drive.makeCopy();
  }
}

我创建了一个脚本,允许用户通过按下图形将所有数据字段重置为空。

  function reset() {
    var s = SpreadsheetApp.getActive().getSheetByName('STATUS');
    s.getRange("a2:b4").clearContent();
    s.getRange("c3:d4").clearContent();
    s.getRange("e2:f4").clearContent();
    s.getRange("b5").clearContent();
    s.getRange("e5:f5").clearContent();
    s.getRange("c6:d6").clearContent();
    s.getRange("f6").clearContent();
    s.getRange("c7:f10").clearContent();
    s.getRange("a12:f18").clearContent();
    s.getRange("b20:f25").clearContent();
    s.getRange("b27:f31").clearContent();
    s.getRange("b33:f37").clearContent();
    s.getRange("b39:f39").clearContent();
    s.getRange("b41:f46").clearContent();
    s.getRange("b48:f52").clearContent();
    s.getRange("b54:f58").clearContent();
    s.getRange("b60:f60").clearContent();
    s.getRange("b62:f79").clearContent();
    s.getRange("b81:f81").clearContent();
    s.getRange("d83:f91").clearContent();
    s.getRange("d94:f96").clearContent();
    s.getRange("d98:f105").clearContent();
    s.getRange("d107:f109").clearContent();
    s.getRange("c112:f123").clearContent();
    s.getRange("b113:f113").clearContent();
    s.getRange("b115:f115").clearContent();
    s.getRange("b117:f117").clearContent();
    s.getRange("b119:f119").clearContent();
    s.getRange("b121:f121").clearContent();
    s.getRange("b123:f123").clearContent();
    s.getRange("d124:f124").clearContent();
}

我想做的是拥有一个&#34;按钮&#34;对于他们按下的用户,它连续运行四个脚本。我试图通过最佳方式来实现这一点,这就是我需要帮助的地方。

  1. 将他们当前正在处理的电子表格重命名为合并单元格中的数据(A2:B4),它将是一个类似&#34; 17-087&#34;

  2. 的数字
  3. 制作将自动保存在同一文件夹中的整个电子表格的副本

  4. 清除&#34;重置&#34;中特定单元格的数据上面的脚本

  5. 从单元格中的数据重命名当前电子表格&#39; J2&#39;

  6. 理论上,用户将按下一个按钮,它会将电子表格(不是表格,而是整个文件)重命名为合并单元格中的数据,即。 &#34;状态17-087&#34;,然后它将复制整个电子表格(文件),然后清除所有指定的单元格,然后将电子表格重命名为&#39; J2&#39;这是&#34; STATUS TEMPLATE&#34;。

    任何人都可以帮我解决这个多步骤脚本吗? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

可以尝试这样的事情:

var ss = SpreadsheetApp.getActiveSpreadsheet();
function onOpen() {
 
    // Add a menu item based on properties (doesn't work in AuthMode.NONE).
  var items = [
    {name: 'Backup', functionName: 'backup'},
  ];
    ss.addMenu('Backup', items);
    }
       
    function backup() {
    rename(); 
    copyDocs(); 
    reset(); 
    rename2();
    }
    
     function rename(){
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var first = ss.getSheetByName("Sheet1");
    // renames the google sheet to the data that is in 2nd Row, 3rd Column
    ss.rename(first.getRange(2, 3).getValue());
    }
    
    function copyDocs() {
    for(i=0; i<1; i++){
    var drive=DriveApp.getFileById('190X72ZGwHtKaUa5MQerlW2k1ops-zYTnr1UXwuweJxGY');
    drive.makeCopy();
    }
    }
    
        function reset() {
    var s = SpreadsheetApp.getActive().getSheetByName('STATUS');
    s.getRange("a2:b4").clearContent();
    s.getRange("c3:d4").clearContent();
    s.getRange("e2:f4").clearContent();
    s.getRange("b5").clearContent();
    s.getRange("e5:f5").clearContent();
    s.getRange("c6:d6").clearContent();
    s.getRange("f6").clearContent();
    s.getRange("c7:f10").clearContent();
    s.getRange("a12:f18").clearContent();
    s.getRange("b20:f25").clearContent();
    s.getRange("b27:f31").clearContent();
    s.getRange("b33:f37").clearContent();
    s.getRange("b39:f39").clearContent();
    s.getRange("b41:f46").clearContent();
    s.getRange("b48:f52").clearContent();
    s.getRange("b54:f58").clearContent();
    s.getRange("b60:f60").clearContent();
    s.getRange("b62:f79").clearContent();
    s.getRange("b81:f81").clearContent();
    s.getRange("d83:f91").clearContent();
    s.getRange("d94:f96").clearContent();
    s.getRange("d98:f105").clearContent();
    s.getRange("d107:f109").clearContent();
    s.getRange("c112:f123").clearContent();
    s.getRange("b113:f113").clearContent();
    s.getRange("b115:f115").clearContent();
    s.getRange("b117:f117").clearContent();
    s.getRange("b119:f119").clearContent();
    s.getRange("b121:f121").clearContent();
    s.getRange("b123:f123").clearContent();
    s.getRange("d124:f124").clearContent();
    }
    
         function rename2(){
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var first = ss.getSheetByName("Sheet1");
    // renames the google sheet to the data that is in J2
    ss.rename(first.getRange(2, 10).getValue());
    }