Получить номер строки из запроса API визуализации Google к листу Google - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть запрос к Google листу, который работает, как я ожидаю. Я использую Postman для тестирования, потому что в моем приложении, которое является настольным приложением, я не могу использовать ни один из SDK, предоставляемых Google. Это не веб-приложение, поэтому я не могу использовать даже источник Javascript, размещенный в CDN Google. В любом случае, я запрашиваю электронную таблицу, которая имеет много строк, с конкретным столбцом, к которому я обращаюсь:

Я использую следующую конечную точку после получения токена аутентификации с помощью методологии OAuth2:

https://docs.google.com/a/google.com/spreadsheets/d/{{sheet_key}}/gviz/tq?sheet={{tab_name}}&tq={{sheet_query}}

Переменная {{sheet_query}} в Postman, которая правильно обрабатывает кодировку URL, установлена ​​на следующее:

select * where C = 'ready'

Ответ для моего конкретный лист - это то, чего я ожидал, и данные верны На листе есть три строки, в которых для столбца C установлено значение «готово», и это здорово.

Теперь, ответ на этот запрос GET не возвращает обратный порядковый индекс строки для найденных строк. , это просто отправить данные строк. Проблема в том, что я хочу записать обратно в эти строки через API Google Sheets v4, который теперь использует нотацию A1 в качестве метода для определения диапазона обновляемых ячеек.

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

Я нашел этот поток переполнения стека , но я не совсем уверен, если это может работать в моем случае, так как я по сути строю запросы вручную и без SDK. Я также не использую Google Apps Script, я использую API визуализации. Единственный обходной путь, о котором я могу подумать, - заставить конечного пользователя убедиться, что у запрашиваемого рабочего листа есть столбец, ячейки которого имеют формулу =ROW(), но я бы предпочел не устанавливать это требование со стороны пользователя.

Любые идеи или рекомендации приветствуются.

1 Ответ

2 голосов
/ 06 февраля 2020
  • Вы хотите получить номера строк, выполнив поиск по значению на листе в электронной таблице Google.
  • Вы хотите добиться этого с помощью скрипта Google Apps.

I мог понять как выше. Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Поток:

  1. Извлечение объекта листа.
  2. Поиск значений на листе с использованием значения поиска.
    • В этом случае я использовал TextFinder.
  3. Получение номеров строк из результата поиска.

Пример сценария:

Скопируйте и вставьте следующий пример скрипта в редактор скриптов и установите переменные searchValue, spreadsheetId, sheetName. Затем, в качестве пробного запуска, пожалуйста, запустите функцию testRun(). При этом номера строк возвращаются в виде массива.

function getRowNumberBySearch(searchValue, spreadsheetId, sheetName) {
  var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
  var t = sheet.createTextFinder(searchValue).findAll();
  return t.map(function(e) {return e.getRow()});
}

// Please run this function.
function testRun() {
  var searchValue = "sample";
  var spreadsheetId = "###";
  var sheetName = "Sheet1";

  var res = getRowNumberBySearch(searchValue, spreadsheetId, sheetName);
  Logger.log(res)
}

Ссылки:

Добавлено:

Дополнительный вопрос 1:

Есть ли способ сузить метод .findAll() до определенного c диапазон в пределах листа, чтобы он фокусировался на одном столбце?

Пример сценария:
function getRowNumberBySearch(searchValue, spreadsheetId, sheetName, range) {
  var range = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName).getRange(range);
  var t = range.createTextFinder(searchValue).findAll();
  return t.map(function(e) {return e.getRow()});
}
  • В этом случае range - это a1Notation.

Дополнительный вопрос 2:

можно ли вернуть все значения строки, а не только их индекс?

Пример сценария:
function getRowNumberBySearch(searchValue, spreadsheetId, sheetName, range) {
  var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
  var t = sheet.getRange(range).createTextFinder(searchValue).findAll();
  return t.map(function(e) {return sheet.getRange(e.getRow(), 1, 1, sheet.getLastColumn()).getValues()[0]});
}
  • В этом случае range является a1Notation.
  • Я думаю, что в этом случае также может быть использована конечная точка вашего вопроса.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...