当我尝试以编程方式将图表添加到Google电子表格时,api v4失败,并显示有关网格ID的Google_Service_Exception

时间:2016-09-19 13:00:28

标签: php google-api-client google-sheets-api

我玩google sheet api v4,因为它能够呈现图表看起来很有趣。我正在使用谷歌的api客户端。

首先,我创建了一个包含两张纸的新电子表格,并在第一张纸上填写了数据。这按预期工作。

然后我想在第二张纸上根据第一张纸上的数据渲染图表。我想用饼图开始简单的方法,因为那里只有一个数据系列。

我总是最终收到以下错误消息:

  

“message”:“无效请求[0] .addChart:没有ID为1的网格”

我设置的唯一ID是我已经创建的第二张图表的图表锚单元格:

$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的内容,它对我来说是正确的。

1 个答案:

答案 0 :(得分:3)

好的,我找到了解决方案。 我认为sheetId是工作表的索引,但它是一个工作表创建后的ID。

所以解决方案是获得正确的ID:

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

当您上传电子表格时会生成这些ID,因此,在一个创建请求中无法创建包含其图表的工作表,但您必须先创建所需的工作表,然后才能添加图表。另一个请求。