Когда я пытаюсь программно добавить диаграмму в электронную таблицу Google, api v4 не работает с Google_Service_Exception о идентификаторе сетки

Я поигрался с api v4 листов Google, потому что он выглядит довольно интересно с возможностью рендеринга диаграмм. Я использую клиент google api для php.

Прежде всего, я создал новую электронную таблицу с двумя листами и заполнил данные на первом листе. Это сработало, как и ожидалось.

Затем я хотел отобразить диаграмму на основе данных первого листа на втором листе. Я хотел начать простой путь с круговой диаграммы, потому что у вас есть только одна серия данных.

Я всегда получаю следующее сообщение об ошибке:

"message": "Недействительные запросы [0] .addChart: Нет сетки с идентификатором: 1"

Единственный идентификатор, который я установил, - это идентификатор ячейки привязки диаграмм для второго листа, который я уже создал:

$googleSheetsSheetGridCoordinate = new Google_Service_Sheets_GridCoordinate();
$googleSheetsSheetGridCoordinate->setSheetId(1);
$googleSheetsSheetGridCoordinate->setColumnIndex(0);
$googleSheetsSheetGridCoordinate->setRowIndex(0);

$googleSheetsSheetOverlayPosition = new Google_Service_Sheets_OverlayPosition();
$googleSheetsSheetOverlayPosition->setAnchorCell($googleSheetsSheetGridCoordinate);
$googleSheetsSheetOverlayPosition->setHeightPixels(500);
$googleSheetsSheetOverlayPosition->setWidthPixels(700);

Заглянув в электронную таблицу, есть лист с id: 1, а также таблица типов, поэтому я понятия не имею, в чем может быть проблема.

Обновление Вот тело сообщения моего запроса addChart:

{
   "requests":[
      {
         "addChart":{
            "chart":{
               "spec":{
                  "title":"Pie Chart",
                  "pieChart":{
                     "legendPosition":"BOTTOM_LEGEND",
                     "domain":{
                        "sourceRange":{
                           "sources":[
                              {
                                 "endRowIndex":3,
                                 "sheetId":0,
                                 "startColumnIndex":0,
                                 "startRowIndex":2
                              }
                           ]
                        }
                     },
                     "series":{
                        "sourceRange":{
                           "sources":{
                              "endRowIndex":4,
                              "sheetId":0,
                              "startColumnIndex":0,
                              "startRowIndex":3
                           }
                        }
                     }
                  }
               },
               "position":{
                  "overlayPosition":{
                     "heightPixels":500,
                     "widthPixels":700,
                     "anchorCell":{
                        "columnIndex":0,
                        "rowIndex":0,
                        "sheetId":1
                     }
                  }
               }
            }
         }
      }
   ]
}

Когда я сравниваю его с примером, я смог найти только один, который охватывает добавление диаграмм, https://codelabs.developers.google.com/codelabs/sheets-api/#9, мне это кажется правильным.


person Kasihasi    schedule 19.09.2016    source источник


Ответы (1)


Хорошо, я нашел решение. Я думал, что sheetId - это индекс листа, но это идентификатор, который лист получает после создания.

Итак, решение состоит в том, чтобы получить правильные идентификаторы:

$sourceId = $googleSheetsSpreadsheet->getSheets()[0]->getProperties()->getSheetId();
$targetId = $googleSheetsSpreadsheet->getSheets()[1]->getProperties()->getSheetId();

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

person Kasihasi    schedule 19.09.2016
comment
Если вы хотите добавить диаграмму на новый лист, вы можете использовать свойство newSheet: true EmbeddedObjectPosition в AddChartRequest. Если вы хотите добавить диаграмму к существующему листу, вам необходимо указать идентификатор листа при добавлении этого листа, а затем использовать тот же идентификатор для идентификатора листа диаграммы. - person Sam Berlin; 19.09.2016
comment
Спасибо, Сэм! Хороший звонок! - person Kasihasi; 27.09.2016