Как получить порядковый индекс столбца из фида строк Google Sheets?

Я пытаюсь найти наиболее надежный способ определения порядкового номера столбца в листе 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 |
              +----+---------+-----------+---------+---------+

В моем коде я могу успешно получить поток на основе строк из листа через API Google Sheet. Объект, который я возвращаю для каждой строки в фиде, включает в себя различные свойства, большинство из которых являются значениями в строке заголовка. Так, например, объект с одной строкой выглядит примерно так:

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

Я хочу найти порядковый номер любого столбца в потоке на основе строк, но не сразу кажется очевидным, как это сделать. Кажется, что свойства объекта упорядочены в соответствии с их положением в строке заголовка, но мне трудно найти, к какому номеру столбца относится это свойство.

Причина, по которой мне нужен номер столбца, заключается в том, что я хочу получить фид на основе ячеек для определенного столбца и строки, но, похоже, API Google требует, чтобы вы знали порядковый номер столбца. То есть вам нужно знать минимальный столбец и максимальный столбец, а также минимальную строку и максимальную строку для фида на основе ячеек. Теперь я знаю, что, разумеется, могу посмотреть на столбец в пользовательском интерфейсе Таблиц и определить, в каком положении находится столбец, но как я могу сделать это программно?

В общем, я пытаюсь найти программный способ ответить на простой вопрос, например вопрос:

"Каков порядковый номер столбца phone?"

Возможно ли это даже с ответом Google в виде строки?


person ariestav    schedule 26.02.2017    source источник


Ответы (1)


В Sheetsv4 такой функции пока нет. Вам необходимо вручную выполнить базовые методы чтения и проанализировать ответ и выполнить цикл Это.

введите описание изображения здесь Здесь я искал позицию "телефон", то есть 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);
      }

Выход:

введите здесь описание изображения

Могут быть и другие способы сделать это. Я только что показал вам свою версию.

person noogui    schedule 26.02.2017
comment
Если строк много, например 100000 - требует ли это решение, чтобы весь лист был загружен, так сказать, целиком, прежде чем вы сможете выполнить синтаксический анализ столбца? - person ariestav; 08.02.2018