2016-09-19 101 views
0

我在Google PHP API Client中遇到了很多困難。'requests [0] .update_cells.rows [0]'處的值無效'

我修改了REST.php類來轉儲發送到Google Sheets API的JSON。

獲取生成的JSON是這樣的:

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

使用OAuth園地,我可以看到我有無效值。我不知道爲什麼這些值是無效的。

我有一個「插入維度請求」註釋掉。我將維度設置爲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

好吧,我終於想通了這一點。

我正在構造不正確的行。您必須適當地使用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); 
相關問題