优化代码以及如何将活动电子表格的选定区域作为输入google文档



我已经编写了将12.4/12/12.03等格式更改为12:40:00/12:00:00/12:03:00的脚本这是代码:

function myFunction() {
  var sheet=SpreadsheetApp.getActiveSheet();
  var rows= sheet.getDataRange();
  var numRows=rows.getNumRows();
  var values=rows.getValues()
  var column = [];
  var p = 0;
  var k = "H";
   for (var i=0;i<numRows;i++) {
    // var cell = 
    //Split the string a the .
  var  string = values[i][7].split(".");
     string[0] = string[0].toString();
     p = i+1;
     k = "H"+p;
     var cell = sheet.getRange(k);
     if(string[1]){
       string[1] = string[1].toString(); 
    // if the second part is like 4 in 12.4 you set it to 40
     if(string[1]!=0) {
    if (string[1].length == 1 )
    {   string[1] += "0";}
     }
    // Set the row value to the format you like, here : 12:40:00/12:40
      var changed_format = string[0] + ":" + string[1] + ":00";
     values[i][7]=changed_format;
     p = i+1;
     k = "H"+p;
     cell.setValue(changed_format);     
}
     else {
       var changed_format = values[i][7]+":00:00";
     cell.setValue(changed_format);
     }    
   }

在上面的代码中,我提到了列。。。即,我必须为每一列运行此脚本。。。每次。。。例如:values[i][7] k="H"+p用于8th column。那么,有人能告诉我怎么做吗…一次。。。如果可能的话,减少我的代码。。(优化)。。还有。。如果可以这样做:如果我选择电子表格中的列,并且脚本所做的更改应用于所选区域。。。我的意思是,我希望我的脚本将选定的区域作为输入。。。有可能做…如果怎么做。?

优化代码的一个关键是减少对谷歌服务的调用次数,并尝试使用JavaScript完成这些调用。这里有一个你可以使用的优化版本。请注意,我还没有测试过它——所以如果你遇到一些小的语法错误,请随时修复它们,或者在无法修复的情况下大喊一声。

function myFunction() {
  var sheet=SpreadsheetApp.getActiveSheet();
  var rows= sheet.getDataRange();
  var values=rows.getValues(); 
  var COL_H = 8;
  var numRows=values.length ; // Length of array = nuymRows. rows.getNumRows();
  var column = [];
  //var p = 0;
  //var k = "H";
  var destArray = new Array();
   for (var i=0;i<numRows;i++) {
    // var cell = 
    //Split the string a the .
    var  string = values[i][7].split(".");
     string[0] = string[0].toString();
     //p = i+1;
     //k = "H"+p;
     //var cell = sheet.getRange(k);
     if(string[1]){
       string[1] = string[1].toString(); 
       // if the second part is like 4 in 12.4 you set it to 40
       if(string[1]!=0) {
         if (string[1].length == 1 )
         {   string[1] += "0";}
       }
      // Set the row value to the format you like, here : 12:40:00/12:40
      var changed_format = string[0] + ":" + string[1] + ":00";
      //values[i][7]=changed_format;
      //p = i+1;
      //k = "H"+p;
      //cell.setValue(changed_format);   
      destArray.push([changed_format]);  
    }
    else {
       var changed_format = values[i][7]+":00:00";
       //values [i][7] = changed_format;
     //cell.setValue(changed_format);
      destArray.push([changed_format]);
     }
   }
   var destRange = sheet.getRange(1, COL_H, destArray.length, 1);
   destRange.setValues(values);
}

提示:将格式化的代码放在问题中有助于提高的可读性

最新更新