【问题标题】:How to create arrays from google sheet cell data?如何从谷歌表格单元格数据创建数组?
【发布时间】:2019-05-09 15:29:05
【问题描述】:

我正在尝试从谷歌工作表数据创建一个 (4X1) 数组列表。

   A        B    C      D       E     F      G      H      I     J 
Project | Per1 | W1 |  Team1 | Per2 | W2 | Team2 | Per3 | W3 | Team3|
—————————————————————————————————————————————————————————————————————
   p1   | Bill | .5 |  Tech  | Alice|  1 | Other |      |    |      |
   p2   |Larry |  1 |  Tech  | Bill |  1 | Other | Tina | 1  | Other|
   p3   | Joe  |  2 |  Tech  | Beth |  1 | Tech  |      |    |      |
   p4   |Kathy | .5 |  Tech  |      |    |       |      |    |      |
   p5   | Bill | 1  |  Tech  | Larry|  1 | Other |      |    |      |

*我的名声不允许我发布图片

到目前为止,我能够创建一个 (3x1) 数组列表。

 function arrayOfObjects() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var vA=sh.getRange("B2:D6").getValues();
  Logger.log(vA);
}

到目前为止,我的结果是:

 [[Bill, 0.5, Tech], [Larry, 1.0, Other], [Joe, 2.0, Tech], [Kathy, 0.5, Other], [Alice, 1.0, Tech]]

但这仅适用于范围 B2:D6

我需要能够将名称链接到项目(p1、p2...用于进一步分析) 我希望结果是(4X1)数组:

[[p1,Bill,.5,Tech], [p1,Alice,1,Other],[p2,Larry,1,Other],[p2,Bill,.5,Other],
[p2,Tina,1,Other]........[p5,Larry,1,Other]]

最终我想要一张桌子:

    A           B                         
| Name | Number Of project|  
———————————————————————————
| Bill |        3         |
|Larry |        2         |
| Joe  |        1         |   
|Kathy |        1         |
| Alice|        1         |
   etc...

【问题讨论】:

    标签: javascript arrays sorting google-apps-script google-sheets


    【解决方案1】:

    1x4 数组和对象

    这也将生成 1x4 数组和对象。任君挑选。

    function projectInfo() {
      var ss=SpreadsheetApp.getActive();
      var sh=ss.getSheetByName('Projects');
      var rg=sh.getDataRange();
      var vA=rg.getValues();
      var projA=[];
      var projB=[];
      for(var i=1;i<vA.length;i++) {
        for(var j=1;j<vA[i].length;j+=3) {
          if(vA[i][j] && vA[i][j+1] && vA[i][j+2]) {
            projA.push([vA[i][0],vA[i][j],vA[i][j+1],vA[i][j+2]]);
            projB.push({project:vA[i][0],person:vA[i][j],weight:vA[i][j+1],team:vA[i][j+2]}); 
          }
        }
      }
      var rObj={array:projA,object:projB};
      return rObj;
    }
    

    此版本在一个小对话框中显示它们,并显示如何将它们称为索引或按名称(键)。

    function projectInfo() {
      var ss=SpreadsheetApp.getActive();
      var sh=ss.getSheetByName('Projects');
      var rg=sh.getDataRange();
      var vA=rg.getValues();
      var projA=[];
      var projB=[];
      for(var i=1;i<vA.length;i++) {
        for(var j=1;j<vA[i].length;j+=3) {
          if(vA[i][j] && vA[i][j+1] && vA[i][j+2]) {
            projA.push([vA[i][0],vA[i][j],vA[i][j+1],vA[i][j+2]]);
            projB.push({project:vA[i][0],person:vA[i][j],weight:vA[i][j+1],team:vA[i][j+2]}); 
          }
        }
      }
      var rObj={array:projA,object:projB};
      var html='<style>td,th{border:1px solid black;text-align:center;}</style><table>';
      html+='<tr><th>Project</th><th>Person</th><th>Weight</th><th>Team</th></tr>';
      html+='<tr><td colspan="4">Array(indices)</tr>';
      for(var i=0;i<projA.length;i++) {
        html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td>',projA[i][0],projA[i][1],projA[i][2],projA[i][3]);
      }
      html+='<tr><td colspan="4">Object(key,value)</tr>';
      for(var i=0;i<projB.length;i++) {
        html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td>',projB[i].project,projB[i].person,projB[i].weight,projB[i].team);
      }
      html+='</table>';
      var userInterface=HtmlService.createHtmlOutput(html);
      SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Array on Top and Object on Bottom')
    }
    

    【讨论】:

      【解决方案2】:

      所以你需要逐行为团队中的每个人做一个条目?

      data = vA; 
      for (var i=0; i<data.length;i++)
          {
          var project = data[i][0];
          if (data[i][1]!="")push([project,data[i][1],data[i][2],data[i][3] ]);//first person
          if (data[i][4]!="")push([project,data[i][4],data[i][5],data[i][6] ]);//second person
          if (data[i][7]!="")push([project,data[i][7],data[i][8],data[i][9] ]);//third person
          }//for loop
      

      可能有一种更优雅的方式来做到这一点,但这是我首先要做的。

      【讨论】:

        猜你喜欢
        • 2017-04-28
        • 1970-01-01
        • 1970-01-01
        • 2021-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-11
        • 1970-01-01
        相关资源
        最近更新 更多