如何从Google表格行换行中获取列的序数索引?

时间:2017-02-26 00:06:02

标签: google-sheets google-sheets-api

我试图找出最有效的方法来确定google工作表中某列的顺序位置,而不是单元格Feed。

因此,例如,我有以下电子表格:

                        A          B          C         D     
              +----+-----------------------------------------+
 Header Row   | 1  |  name   |  address  |  phone  |  email  |
              +----+---------+-----------+---------+---------|
              | 2  | Jane    | 1001      | 6139023 | w@gmail |
              +----+---------+-----------+---------+---------+
              | 3  | Jon     | 1102      | 4320909 | x@gmail |
              +----+---------+-----------+---------+---------+
              | 4  | Jeff    | 1203      | 4132323 | y@gmail |
              +----+---------+-----------+---------+---------+
              | 5  | Jenny   | 1304      | 3346044 | z@gmail |
              +----+---------+-----------+---------+---------+

在我的代码中,我能够通过Google的Sheet API从表格中成功获取基于行的Feed。我为feed中每行返回的对象包括各种属性,其中大部分是标题行中的值。例如,单行对象看起来像:

{
    id           : 'https://spreadsheets.google.com/...'
  , 'app:edited' : '2017-02-24T23:59:56:56.520Z'
  , _links       : [ self: 'https://...', edit: 'https://...']
  , name         : 'Jane'
  , address      : '1001'
  , phone        : '6139023'
  , email        : 'w@gmail'
}

我想从基于行的Feed中找到任何给定列的序号位置,但是如何做到这一点并不是显而易见的。似乎对象的属性是根据它们在标题行中的位置排序的,但是我很难找到属性所指的列号。

我想要列号的原因是我希望获得特定列和行的基于单元格的Feed,但看起来Google的API要求您知道列的序号位置。也就是说,您需要知道min-column和max-column,以及基于单元格的feed的min-row和max-row。现在,我知道我可以查看Sheets UI中的列并确定列所在的位置,但是我该如何以编程方式执行此操作?

总之,我试图找到一种程序化的方式来回答一个简单的问题,例如问题:

" phone列的序号位置是什么?"

Google的排行响应是否可以实现这一点?

1 个答案:

答案 0 :(得分:1)

Sheetsv4中还没有这样的功能。您必须手动执行Basic Reading methods并解析响应并循环遍历它。

enter image description here 在这里,我一直在寻找“手机”的位置,即C3

  function findPosition(){
         var arrayBuffer;
         var myArr;
         var xhr = new XMLHttpRequest();
         xhr.open('GET', 'https://sheets.googleapis.com/v4/spreadsheets/'+myspreadsheetId+'/values/'+"Sheet1!"+A+":"+Z);
         xhr.setRequestHeader('Authorization', 'Bearer ' + myAccessToken);

         xhr.onload = function (oEvent) {
             arrayBuffer = xhr.response; // Note: not oReq.responseText
             console.log("arrayBuffer "+ arrayBuffer);
             myArr = JSON.parse(arrayBuffer);

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

                 if(myArr.values[0][i] === "phone"){
                     console.log("column position is " + (i+1)); // +1 because counting starts at 0
                 }
              }
         };
         xhr.send(null);
      }

输出:

enter image description here

可能还有其他方法可以做到这一点。我刚给你看了我的版本。