При вызове цветов фона из листов Google с использованием API листов Google отсутствуют данные

Из предыдущего вопроса, связанного здесь ( Предыдущий вопрос ) Я узнал о том, что Sheets.SpreadSheets.get вызывает JSON данных листа, который позволит мне получить фоновые цвета листа в моем проекте. Раньше Id делал это с var BackgroundColors = ActiveWeekSheet.getDataRange().getBackgrounds();, но мне сказали, что метод JSON будет более быстрым методом чтения/записи. Они посоветовали мне немного почитать об объектах Javascript, но после этого я все еще в замешательстве.

У меня есть следующий код. TestArray = Sheets.Spreadsheets.get("1irmcO8yMxYwkcLaxZd1cN8XsTIhpzI98If_Cxgp1vF8");, который, кажется, вызывает JSON с конкретными данными листа. Оператор регистратора TestArray возвращает это: testArrayObject: {"properties":{"gridProperties":{"rowCount":1000,"columnCount":26},"sheetType":"GRID","index":0,"sheetId":0,"title":"Awesome"}}

Члены сообщества ранее предлагали мне найти цвета фона по адресу: sheets[].data[].rowData[].values[].cellData.effectiveFormat.backgroundColor

Я выделил одну из ячеек желтым цветом, но при просмотре приведенного выше JSON я не могу найти ничего, что ссылалось бы на цвет. Определенно нет никакого многоуровневого JSON для ссылки на листы-›данные-›rowData-›значения-›celldata.efficientFormat.backgroundColor.

Что мне здесь не хватает? Нужно ли как-то форматировать? Разве я не вызываю правильный JSON для начала?

Спасибо!


person LANCE    schedule 21.09.2020    source источник


Ответы (2)


Как указано в документации,

По умолчанию данные в сетках не возвращаются. Вы можете включить данные сетки одним из двух способов:

  • Укажите маску поля, в которой перечислены нужные поля, используя параметр URL-адреса полей в HTTP.
Sheets.Spreadsheets.get(spreadsheetId, {
  ranges:"Sheet1!A1:A5",
  fields:"sheets(data(rowData(values(effectiveFormat.backgroundColor))))"
})
  • Задайте для параметра URL-адреса includeGridData значение true. Если установлена ​​маска поля, параметр includeGridData игнорируется.
Sheets.Spreadsheets.get(spreadsheetId, {
  ranges:"Sheet1!A1:A5",
  includeGridData: true
})

В двух словах,

  • несколько разных полей разделены запятыми, и
  • подполя разделены точками.
  • Для удобства несколько подполей одного типа могут быть перечислены в круглых скобках.
  • Вы можете протестировать API здесь
person TheMaster    schedule 21.09.2020
comment
Благодарю за ваш ответ. Я смог использовать ваше направление, чтобы получить информацию о цвете. Он возвращает это: testArray: {"sheets":[{"data":[{"rowData":[{"values":[{"effectiveFormat":{"backgroundColor":{"red":1}}}]},{"values":[{"effectiveFormat":{"backgroundColor":{"green":1,"red":1,"blue":1}}}]},{"values":[{"effectiveFormat":{"backgroundColor":{"green":1,"red":1,"blue":1}}}]}]}]}]}. Я предполагал, что это вернет массив, но я не могу нормально пройти через него или получить его .length. Это массив? - person LANCE; 22.09.2020
comment
@LANCE Вам нужно научиться анализировать объекты и массивы. Прочитайте ссылку, которую я просил вас прочитать раньше. Это объект с ключом "sheets" со значением arrays, которые в свою очередь содержат несколько уровней вложенных массивов и объектов. Чтобы перейти к значению красного цвета первого цвета, вы должны использовать что-то вроде response.sheets[0].data[0].rowData[0].values[0].effectiveFormat.backgroundColor.redТакже см. информационную страницу тега для JavaScript. гиды. - person TheMaster; 22.09.2020

В методе spreadsheets.get есть необязательные параметры. это даст вам эти данные, но вам нужно явно включить их:

  • ranges — диапазоны для извлечения из электронной таблицы.
  • includeGridData – данные ячейки в указанном диапазоне.

Это указывает диапазон только одной ячейки (A1 на Листе 1), но вы можете указать больший диапазон и перемещаться по массиву, если вам нужно.

var TestArray = Sheets.Spreadsheets.get(SS_ID, {ranges: "Sheet1!A1", includeGridData: true}); 

Очень важно помнить, что это возвращает объект цвета Color. со значениями RGBA в диапазоне от 0 до 1, но в других сценариях приложений используется шестнадцатеричный цвет или обычные значения 0–255 RGB.

person Diego    schedule 21.09.2020