API Google Sheets позволяет создавать и обновлять сводные таблицы в электронных таблицах. Примеры на этой странице иллюстрируют, как можно выполнить некоторые распространенные операции со сводными таблицами с помощью API Sheets.
Эти примеры представлены в виде HTTP-запросов, чтобы обеспечить языковую нейтральность. Чтобы узнать, как реализовать пакетное обновление на разных языках с помощью клиентских библиотек Google API, см. раздел «Обновление электронных таблиц» .
В этих примерах заполнители SPREADSHEET_ID и SHEET_ID указывают, где следует указывать эти идентификаторы. Идентификатор электронной таблицы можно найти в URL-адресе электронной таблицы. Идентификатор листа можно получить, используя метод spreadsheets.get . Диапазоны указываются с использованием обозначения A1 . Пример диапазона: Sheet1!A1:D5.
Кроме того, в поле SOURCE_SHEET_ID указан ваш лист с исходными данными. В этих примерах это таблица, указанная в разделе «Исходные данные сводной таблицы» .
Исходные данные сводной таблицы
В этих примерах предположим, что используемая электронная таблица содержит следующие исходные данные о продажах на первом листе («Лист 1»). Строки в первой строке — это метки для отдельных столбцов. Примеры чтения данных с других листов электронной таблицы см. в обозначении A1 .
| А | Б | С | Д | Е | Ф | Г | |
| 1 | Категория товара | Номер модели | Расходы | Количество | Область | Продавец | Дата отгрузки |
| 2 | Колесо | В-24 | 20,50 долларов | 4 | Запад | Бет | 01.03.2016 |
| 3 | Дверь | Д-01X | 15,00 долларов | 2 | Юг | Амир | 15.03.2016 |
| 4 | Двигатель | ENG-0134 | 100,00 долларов США | 1 | Север | Кармен | 20.03.2016 |
| 5 | Рамка | FR-0B1 | 34,00 долларов | 8 | Восток | Ханна | 3/12/2016 |
| 6 | Панель | П-034 | 6,00 долларов | 4 | Север | Девин | 02.04.2016 |
| 7 | Панель | П-052 | 11,50 долларов | 7 | Восток | Эрик | 16.05.2016 |
| 8 | Колесо | В-24 | 20,50 долларов | 11 | Юг | Шелдон | 30.04.2016 |
| 9 | Двигатель | ENG-0161 | 330,00 долларов США | 2 | Север | Джесси | 07.02.2016 |
| 10 | Дверь | Д-01Y | 29,00 долларов | 6 | Запад | Армандо | 13.03.2016 |
| 11 | Рамка | FR-0B1 | 34,00 долларов | 9 | Юг | Юлиана | 27.02.2016 |
| 12 | Панель | П-102 | 3,00 доллара | 15 | Запад | Кармен | 18.04.2016 |
| 13 | Панель | П-105 | 8,25 долларов | 13 | Запад | Джесси | 20.06.2016 |
| 14 | Двигатель | ENG-0211 | 283,00 долларов США | 1 | Север | Амир | 21.06.2016 |
| 15 | Дверь | Д-01X | 15,00 долларов | 2 | Запад | Армандо | 07.03.2016 |
| 16 | Рамка | FR-0B1 | 34,00 долларов | 6 | Юг | Кармен | 15.07.2016 |
| 17 | Колесо | В-25 | 20,00 долларов | 8 | Юг | Ханна | 05.02.2016 |
| 18 | Колесо | В-11 | 29,00 долларов | 13 | Восток | Эрик | 19.05.2016 |
| 19 | Дверь | Д-05 | 17,70 долларов | 7 | Запад | Бет | 28.06.2016 |
| 20 | Рамка | FR-0B1 | 34,00 долларов | 8 | Север | Шелдон | 30.03.2016 |
Добавить сводную таблицу
Приведенный ниже пример кода spreadsheets.batchUpdate демонстрирует, как использовать UpdateCellsRequest для создания сводной таблицы на основе исходных данных, привязав ее к ячейке A50 листа, указанного параметром SHEET_ID .
Запрос настраивает сводную таблицу со следующими свойствами:
- Одна группа значений ( Количество ), указывающая количество продаж. Поскольку существует только одна группа значений, два возможных варианта настройки
valueLayoutэквивалентны. - Две группы строк ( Категория товара и Номер модели ). Первая сортируется по возрастанию общего количества из региона «Запад». Таким образом, «Двигатель» (без продаж в регионе «Запад») находится выше «Двери» (с 15 продажами в регионе «Запад»). Группа «Номер модели» сортируется по убыванию общего количества продаж во всех регионах, поэтому «W-24» (15 продаж) находится выше «W-25» (8 продаж). Это достигается путем установки значения поля
valueBucketравным{}. - Группа столбцов ( Регион ), отсортированная в порядке возрастания по объему продаж.
valueBucketснова установлено равным{}. У «Севера» наименьший общий объем продаж, поэтому он отображается в качестве первого столбца «Регион» .
Протокол запроса представлен ниже.
POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate{ "requests": [ { "updateCells": { "rows": [ { "values": [ { "pivotTable": { "source": { "sheetId":SOURCE_SHEET_ID, "startRowIndex": 0, "startColumnIndex": 0, "endRowIndex": 20, "endColumnIndex": 7 }, "rows": [ { "sourceColumnOffset": 0, "showTotals": true, "sortOrder": "ASCENDING", "valueBucket": { "buckets": [ { "stringValue": "West" } ] } }, { "sourceColumnOffset": 1, "showTotals": true, "sortOrder": "DESCENDING", "valueBucket": {} } ], "columns": [ { "sourceColumnOffset": 4, "sortOrder": "ASCENDING", "showTotals": true, "valueBucket": {} } ], "values": [ { "summarizeFunction": "SUM", "sourceColumnOffset": 3 } ], "valueLayout": "HORIZONTAL" } } ] } ], "start": { "sheetId":SHEET_ID, "rowIndex": 49, "columnIndex": 0 }, "fields": "pivotTable" } } ] }
Запрос создает сводную таблицу следующего вида:

Добавьте сводную таблицу с вычисляемыми значениями.
Приведенный ниже пример кода spreadsheets.batchUpdate демонстрирует, как использовать UpdateCellsRequest для создания сводной таблицы с группой вычисляемых значений на основе исходных данных, привязав ее к ячейке A50 листа, указанного параметром SHEET_ID .
Запрос настраивает сводную таблицу со следующими свойствами:
- Две группы значений ( Количество и Общая цена ). Первая указывает количество продаж. Вторая — это расчетное значение, основанное на произведении стоимости детали и общего количества продаж, с использованием следующей формулы:
=Cost*SUM(Quantity). - Три группы строк ( Категория товара , Номер модели и Стоимость ).
- Одна группа столбцов ( Регион ).
- В каждой группе группы строк и столбцов сортируются по имени (а не по количеству ), упорядочивая таблицу по алфавиту. Это достигается путем исключения поля
valueBucketизPivotGroup.- Для упрощения отображения таблицы запрос скрывает промежуточные итоги для всех групп строк и столбцов, кроме основных.
- Запрос устанавливает для
valueLayoutVERTICALдля улучшения внешнего вида таблицы.valueLayoutважен только в том случае, если имеется 2 или более групп значений.
Протокол запроса представлен ниже.
POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate{ "requests": [ { "updateCells": { "rows": [ { "values": [ { "pivotTable": { "source": { "sheetId":SOURCE_SHEET_ID, "startRowIndex": 0, "startColumnIndex": 0, "endRowIndex": 20, "endColumnIndex": 7 }, "rows": [ { "sourceColumnOffset": 0, "showTotals": true, "sortOrder": "ASCENDING" }, { "sourceColumnOffset": 1, "showTotals": false, "sortOrder": "ASCENDING", }, { "sourceColumnOffset": 2, "showTotals": false, "sortOrder": "ASCENDING", } ], "columns": [ { "sourceColumnOffset": 4, "sortOrder": "ASCENDING", "showTotals": true } ], "values": [ { "summarizeFunction": "SUM", "sourceColumnOffset": 3 }, { "summarizeFunction": "CUSTOM", "name": "Total Price", "formula": "=Cost*SUM(Quantity)" } ], "valueLayout": "VERTICAL" } } ] } ], "start": { "sheetId":SHEET_ID, "rowIndex": 49, "columnIndex": 0 }, "fields": "pivotTable" } } ] }
Запрос создает сводную таблицу следующего вида:

Удаление сводной таблицы
Приведенный ниже пример кода spreadsheets.batchUpdate демонстрирует, как использовать UpdateCellsRequest для удаления сводной таблицы (если она присутствует), привязанной к ячейке A50 листа, указанного параметром SHEET_ID .
Запрос UpdateCellsRequest может удалить сводную таблицу, включив параметр fields в поле "pivotTable", но при этом опустив поле pivotTable в ячейке-привязке.
Протокол запроса представлен ниже.
POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate{
"requests": [
{
"updateCells": {
"rows": [
{
"values": [
{}
]
}
],
"start": {
"sheetId": SHEET_ID,
"rowIndex": 49,
"columnIndex": 0
},
"fields": "pivotTable"
}
}
]
}Редактирование столбцов и строк сводной таблицы
Приведенный ниже пример кода spreadsheets.batchUpdate демонстрирует, как использовать UpdateCellsRequest для редактирования сводной таблицы, созданной в разделе «Добавление сводной таблицы» .
Подмножества поля pivotTable в ресурсе CellData нельзя изменить по отдельности с помощью параметра fields . Для внесения изменений необходимо указать все поле pivotTable целиком. По сути, редактирование сводной таблицы требует ее замены новой.
Запрос вносит следующие изменения в исходную сводную таблицу:
- Удаляет вторую группу строк из исходной сводной таблицы ( номер модели ).
- Добавляет группу столбцов ( Продавец ). Столбцы сортируются в порядке убывания по общему количеству продаж в панели . «Кармен» (15 продаж в панели ) отображается слева от «Джесси» (13 продаж в панели ).
- Сворачивает столбец для каждого региона , кроме «Запад», скрывая группу продавцов для этого региона. Это делается путем установки значения параметра
collapsedвtrueв параметреvalueMetadataдля этого столбца в группе столбцов «Регион» .
Протокол запроса представлен ниже.
POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate{ "requests": [ { "updateCells": { "rows": [ { "values": [ { "pivotTable": { "source": { "sheetId":SOURCE_SHEET_ID, "startRowIndex": 0, "startColumnIndex": 0, "endRowIndex": 20, "endColumnIndex": 7 }, "rows": [ { "sourceColumnOffset": 0, "showTotals": true, "sortOrder": "ASCENDING", "valueBucket": { "buckets": [ { "stringValue": "West" } ] } } ], "columns": [ { "sourceColumnOffset": 4, "sortOrder": "ASCENDING", "showTotals": true, "valueBucket": {}, "valueMetadata": [ { "value": { "stringValue": "North" }, "collapsed": true }, { "value": { "stringValue": "South" }, "collapsed": true }, { "value": { "stringValue": "East" }, "collapsed": true } ] }, { "sourceColumnOffset": 5, "sortOrder": "DESCENDING", "showTotals": false, "valueBucket": { "buckets": [ { "stringValue": "Panel" } ] }, } ], "values": [ { "summarizeFunction": "SUM", "sourceColumnOffset": 3 } ], "valueLayout": "HORIZONTAL" } } ] } ], "start": { "sheetId":SHEET_ID, "rowIndex": 49, "columnIndex": 0 }, "fields": "pivotTable" } } ] }
Запрос создает сводную таблицу следующего вида:

Прочитать данные сводной таблицы
Приведенный ниже пример кода spreadsheets.get показывает, как получить данные сводной таблицы из электронной таблицы. Параметр запроса fields указывает, что должны быть возвращены только данные сводной таблицы (а не значения ячеек).
Протокол запроса представлен ниже.
GET https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID?fields=sheets(properties.sheetId,data.rowData.values.pivotTable) Ответ представляет собой ресурс Spreadsheet , содержащий объект Sheet с элементами SheetProperties . Также имеется массив элементов GridData , содержащих информацию о PivotTable . Информация о сводной таблице содержится в ресурсе CellData листа, к которой привязана таблица (то есть, к верхнему левому углу таблицы). Если для поля ответа установлено значение по умолчанию, оно исключается из ответа.
В этом примере на первом листе ( SOURCE_SHEET_ID ) находятся исходные данные таблицы, а на втором листе ( SHEET_ID ) — сводная таблица, привязанная к ячейке B3. Пустые фигурные скобки указывают на листы или ячейки, которые не содержат данных сводной таблицы. Для справки, этот запрос также возвращает идентификаторы листов.
{ "sheets": [ { "data": [{}], "properties": { "sheetId":SOURCE_SHEET_ID} }, { "data": [ { "rowData": [ {}, {}, { "values": [ {}, { "pivotTable": { "columns": [ { "showTotals": true, "sortOrder": "ASCENDING", "sourceColumnOffset": 4, "valueBucket": {} } ], "rows": [ { "showTotals": true, "sortOrder": "ASCENDING", "valueBucket": { "buckets": [ { "stringValue": "West" } ] } }, { "showTotals": true, "sortOrder": "DESCENDING", "valueBucket": {}, "sourceColumnOffset": 1 } ], "source": { "sheetId":SOURCE_SHEET_ID, "startColumnIndex": 0, "endColumnIndex": 7, "startRowIndex": 0, "endRowIndex": 20 }, "values": [ { "sourceColumnOffset": 3, "summarizeFunction": "SUM" } ] } } ] } ] } ], "properties": { "sheetId":SHEET_ID} } ], }