【问题标题】:How to Setvalues off of an array google GAS for spreadsheets如何从数组 google GAS 中为电子表格设置值
【发布时间】:2015-03-28 21:22:08
【问题描述】:

我已经使用谷歌脚本一周了,我已经尽可能多地搜索以获得答案。有人可以帮帮我吗?我编写了一个简单的脚本来根据课程编号的最后三位(即 PSY-250-400)评估课程是否在线。该脚本工作正常,我将结果推送到数组的末尾。我不知道如何写回谷歌表格。下面是我所拥有的。目前它将根据第一个结果(在线课程)设置值。所以所有值都设置为在线。我现在在 7 行上运行它,但需要在 20,000 行上运行它。

function onlineonly(online){
   var sheet = SpreadsheetApp.getActiveSheet();
   var students = sheet.getRange('A2:D7').getValues();
   var online = ["400","401","403","404","600"];
   var m;
   var section;

   for(var i=0; i<students.length; ++i){

       section = students[i][3].substring(8,13);

       for(var j = 0;j<online.length; j++){

           if(section===online[j]){
               section = m; 
           }
       } 

       if(section === m){

           students[i].push("online");

       } else {

           students[i].push("not online");

       }

       var method = [];

           for(var k = 0; k<students.length; k++){ 

               if(students[i][4]=== "online"){
                   method = "online";
               } else {
                   method = "in person";
               }

           sheet.getRange('c2:c7').setValue(method);

           }
       }
   }

【问题讨论】:

    标签: javascript google-apps-script google-spreadsheet-api


    【解决方案1】:

    要记住的重要一点是 Range 的尺寸必须等于 Array[][] 的确切尺寸。这个数组必须是二维的!否则你会得到一个错误,即 setValues() 方法需要一个 Object[][],而不是一个 Array。

    您正在尝试设置一个简单的数组。此外,您将使用的方法是 setValues(),而不是 setValue()。

    您的代码有点难以理解,因此这是该模式的一个示例:

    function writeOutValues() {
    
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var sheet = ss.getActiveSheet();
    
        var range = sheet.getRange("C2:C7");
        var values = range.getValues();
    
        //remember, a 2d array is a grid of values that corresponds to the grid of the range like so: values[row][column]
        //so in this range, values[0][0] = C2, values[1][0] = C3, etc.
    
        values[0][0] = "New Value";
        values[1][0] = "Another one";
    
        //to set value, 
        range.setValues(values);
    
    }
    

    【讨论】:

      【解决方案2】:

      只需移动内部 for 循环 for(var k = 0; k&lt;students.length; k++) 到主 for 循环之外 并应用zbnrg 告诉的技术
      这是工作代码

      function onlineonly()
      {
        var sheet = SpreadsheetApp.getActiveSpreadsheet();
        var students = sheet.getRange('A2:C4').getValues();
        var online = ["400","401","403","404","600"];
        var m;
        var section;
        for(var i=0; i<students.length; ++i)
        {
           section = students[i][1].slice(8,11);
           for(var j = 0;j<online.length; j++)
           {
             if(section===online[j])
             {
                 section = m; 
             }
           } 
      
           if(section === m)
           {
               students[i].push("online");
           } 
           else 
           {
              students[i].push("not online");
           }
        }
      var range = sheet.getActiveSheet().getRange("C2:C4");
      var method = range.getValues();
      for(var k = 0; k<students.length; k++)
      method[k][0] = students[k][3]==="online"?"online":"in person";   
      Logger.log(method[0][0] +" "+method[1][0] +" "+ method[2][0])
      range.setValues(method);
      }
      

      这是我的电子表格https://docs.google.com/spreadsheets/d/1iA9v_3rPH9JAhAmt2EJTdbqTQkFEl7yewawPy3w4YIg/edit#gid=0

      【讨论】:

        猜你喜欢
        • 2017-09-19
        • 2023-03-04
        • 1970-01-01
        • 2020-07-17
        • 1970-01-01
        • 2015-11-02
        • 1970-01-01
        • 2013-08-25
        • 1970-01-01
        相关资源
        最近更新 更多