'requests [0] .update_cells.rows [0]'的值无效

时间:2016-09-19 17:56:37

标签: php google-api-php-client

我在使用Google PHP API客户端时遇到了很多困难。

我修改了REST.php类,以转储发送到Google表格API的JSON。

生成的JSON是:

{
    "requests": [
        {
            "updateCells": {
                "fields": "*",
                "rows": [
                    [
                        "0",
                        "1",
                        "2",
                        "3"
                    ],
                    [
                        "this",
                        "is",
                        "a",
                        "csv"
                    ]
                ],
                "start": {
                    "columnIndex": 0,
                    "rowIndex": 0,
                    "sheetId": 1503856757
                }
            }
        }
    ]
}

使用OAuth Playground我可以看到我的值无效。我不知道为什么价值无效。

我注释了“插入维度请求”。我将维度设置为10行和10列只是为了开始并尝试找出值无效的原因。错误响应没有说明这些值无效的原因。

我能够通过OAuth Playground获取插入维度请求,但是对于我的生活,我无法使updateCellsRequest工作。

我在使用AppendCellsRequest时也会遇到完全相同的错误。

是否有任何地方可以对返回的错误进行更详细的分析?

我做错了什么?

// https://developers.google.com/sheets/reference/rest/v4/spreadsheets/request#updatecellsrequest
// Rows, Fields, Start, Range
$updateCellsRequest = new \Google_Service_Sheets_UpdateCellsRequest();

$rowData = array();
$lexer = new Lexer(new LexerConfig());
$interpreter = new Interpreter();
$interpreter->addObserver(function(array $row) use (&$rowData, &$range) {
    $sheetRowData = array();

    foreach ($row as $column => $value) {
        $sheetCellData = new \Google_Service_Sheets_CellData();
        $eValue = new \Google_Service_Sheets_ExtendedValue();
        if (is_numeric($value)) {
            $eValue->setNumberValue($value);
        } else {
            $eValue->setStringValue($value);
        }
        $sheetCellData->setUserEnteredValue($eValue);
        $sheetRowData[] = $sheetCellData;
    }

    $sheetRowData = new \Google_Service_Sheets_RowData($sheetRowData);
    $rowData[] = $row;
});
$lexer->parse($fileName, $interpreter);

$updateCellsRequest->setRows($rowData);
$updateCellsRequest->setFields('*');

$gridCoord = new \Google_Service_Sheets_GridCoordinate();
$gridCoord->setSheetId($gSheet->getProperties()->getSheetId());
$gridCoord->setRowIndex(0);
$gridCoord->setColumnIndex(0);

$updateCellsRequest->setStart($gridCoord);

$range = new \Google_Service_Sheets_GridRange();
$range->setSheetId($gSheet->getProperties()->getSheetId());
$range->setStartRowIndex(0);
$range->setStartColumnIndex(0);
$updateCellsRequest->setRange($range);

// Google Sheets Service
$sheetsService = new \Google_Service_Sheets($this->client);

// Create a batch update request
$updateRequest = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest();

// // Insert Dimension Request
// $idr = new \Google_Service_Sheets_InsertDimensionRequest();

// $range = new \Google_Service_Sheets_DimensionRange();
// $range->setSheetId($gSheet->getProperties()->getSheetId());
// $range->setStartIndex(0);
// $range->setDimension('ROWS');
// $range->setEndIndex(sizeof($rowData));

// $idr->setRange($range);


// add a sheets request
$sheetsRequest = new \Google_Service_Sheets_Request();
$sheetsRequest->setUpdateCells($updateCellsRequest);
// $sheetsRequest->setInsertDimension($idr);

// add the sheets request to our batch update
$updateRequest->setRequests(array($sheetsRequest)); 

修改

错误:

{
  "error": {
    "status": "INVALID_ARGUMENT", 
    "message": "Invalid value at 'requests[0].append_cells.rows[0]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"0\"\nInvalid value at 'requests[0].append_cells.rows[1]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"1\"\nInvalid value at 'requests[0].append_cells.rows[2]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"2\"\nInvalid value at 'requests[0].append_cells.rows[3]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"3\"\nInvalid value at 'requests[0].append_cells.rows[0]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"this\"\nInvalid value at 'requests[0].append_cells.rows[1]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"is\"\nInvalid value at 'requests[0].append_cells.rows[2]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"a\"\nInvalid value at 'requests[0].append_cells.rows[3]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"csv\"", 
    "code": 400, 
    "details": [
      {
        "fieldViolations": [
          {
            "field": "requests[0].append_cells.rows[0]", 
            "description": "Invalid value at 'requests[0].append_cells.rows[0]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"0\""
          }, 
          {
            "field": "requests[0].append_cells.rows[1]", 
            "description": "Invalid value at 'requests[0].append_cells.rows[1]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"1\""
          }, 
          {
            "field": "requests[0].append_cells.rows[2]", 
            "description": "Invalid value at 'requests[0].append_cells.rows[2]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"2\""
          }, 
          {
            "field": "requests[0].append_cells.rows[3]", 
            "description": "Invalid value at 'requests[0].append_cells.rows[3]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"3\""
          }, 
          {
            "field": "requests[0].append_cells.rows[0]", 
            "description": "Invalid value at 'requests[0].append_cells.rows[0]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"this\""
          }, 
          {
            "field": "requests[0].append_cells.rows[1]", 
            "description": "Invalid value at 'requests[0].append_cells.rows[1]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"is\""
          }, 
          {
            "field": "requests[0].append_cells.rows[2]", 
            "description": "Invalid value at 'requests[0].append_cells.rows[2]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"a\""
          }, 
          {
            "field": "requests[0].append_cells.rows[3]", 
            "description": "Invalid value at 'requests[0].append_cells.rows[3]' (type.googleapis.com/google.apps.sheets.v4.RowData), \"csv\""
          }
        ], 
        "@type": "type.googleapis.com/google.rpc.BadRequest"
      }
    ]
  }
}

1 个答案:

答案 0 :(得分:1)

好吧,我终于想通了。

我正在错误地构造行。您必须适当地使用RowData和CellData。

最终结果是首先创建UpdateSheetProperties请求和UpdateCellsRequest。

    $updateCellsRequest = new \Google_Service_Sheets_UpdateCellsRequest(array(
        'fields' => '*',
        'start'  => new \Google_Service_Sheets_GridCoordinate(array(
            'sheetId' => $gSheet->getProperties()->getSheetId(),
            'rowIndex' => 0,
            'columnIndex' => 0
        ))
    ));

    // update sheet properties request
    $updateSheetPropertiesRequest = new \Google_Service_Sheets_UpdateSheetPropertiesRequest(array(
        'fields' => '*',
        'properties' => new \Google_Service_Sheets_SheetProperties(array(
            'index' => 0,
            'title'  => $this->generateSheetTitle($season),
            'sheetId' => $gSheet->getProperties()->getSheetId(),
            'gridProperties' => new \Google_Service_Sheets_GridProperties(array(
                'rowCount' => 2,
                'columnCount' => 4
            ))
        ))
    ));

然后,将行添加到updateCellsRequest对象:

    $rowData = array();
    $lexer = new Lexer(new LexerConfig());
    $interpreter = new Interpreter();
    $interpreter->addObserver(function(array $row) use (&$rowData) {
        $sheetRowData = new \Google_Service_Sheets_RowData();
        $cellData = array();

        foreach ($row as $column => $value) {
            $sheetCellData = new \Google_Service_Sheets_CellData(array(
                'userEnteredValue' => new \Google_Service_Sheets_ExtendedValue(array(
                    is_numeric($value) ? 'numberValue' : 'stringValue' => $value
                ))
            ));
            $cellData[] = $sheetCellData;
        }
        $sheetRowData->setValues($cellData);
        $rowData[] = $sheetRowData;
    });
    $lexer->parse($fileName, $interpreter);

    $updateCellsRequest->setRows($rowData);

最后,创建批处理请求对象:

    // Google Sheets Service
    $sheetsService = new \Google_Service_Sheets($this->client);

    // Create a batch update request
    $updateRequest = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest(array(
        'requests' => array(
            new \Google_Service_Sheets_Request(array('updateSheetProperties' => $updateSheetPropertiesRequest)),
            new \Google_Service_Sheets_Request(array('updateCells' => $updateCellsRequest))
        )
    ));

    // send the request
    $sheetsService->spreadsheets->batchUpdate($spreadsheetId, $updateRequest);