【问题标题】:How to get the ordinal index of a column from a Google Sheets row feed?如何从 Google 表格的行提要中获取列的序号索引?
【发布时间】:2017-05-15 22:00:42
【问题描述】:

我正在尝试找出最可靠的方法来从行提要而不是单元格提要中确定 google 工作表中列的序数位置。

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

                        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 的工作表 API 成功地从工作表中获取基于行的提要。我为提要中的每一行返回的对象包括各种属性,其中大部分是标题行中的值。因此,例如,单行对象看起来像:

{
    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'
}

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

我想要列号的原因是我想为特定的列和行获取基于单元格的提要,但 Google 的 API 似乎要求您知道列的序号位置。也就是说,您需要知道最小列和最大列,以及基于单元格的提要的最小行和最大行。现在,我知道我显然可以查看表格 UI 中的列并确定该列所在的位置,但我该如何以编程方式进行呢?

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

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

这甚至可以通过 Google 的 row-feed 响应实现吗?

【问题讨论】:

    标签: google-sheets google-sheets-api


    【解决方案1】:

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

    在这里,我正在寻找“电话”的位置,即 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);
          }
    

    输出:

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

    【讨论】:

    • 如果有很多行,例如 100,000 行 - 此解决方案是否需要“下载”整个工作表才能解析列?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2015-03-19
    • 1970-01-01
    • 2013-06-09
    • 2019-11-16
    相关资源
    最近更新 更多