2016-09-19 5 views
0

Ich habe viele Schwierigkeiten mit dem Google PHP API Client.Ungültiger Wert bei 'requests [0] .update_cells.rows [0]'

Ich habe die REST.php-Klasse geändert, um den JSON zu speichern, der an die Google Tabellen-API gesendet wird.

Die JSON, die erzeugt wird, ist dies:

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

OAuth Spielplatz verwendet, kann ich sehen, dass ich ungültige Werte haben. Ich habe keine Ahnung, warum die Werte ungültig sind.

Ich habe eine "Insert Dimension Request" auskommentiert. Ich setze die Dimension auf 10 Zeilen und 10 Spalten, um zu beginnen und versuche herauszufinden, warum die Werte ungültig sind. Die Fehlerantwort gibt keinen Hinweis darauf, warum diese Werte ungültig sind.

Ich konnte die Insert-Dimensionsanforderungen über den OAuth-Playground ausführen, aber für das Leben von mir kann ich die updateCellsRequest nicht funktionieren.

Ich bekomme die genaue gleichen Fehler bei der Verwendung von AppendCellsRequest als auch.

Gibt es irgendwo eine detailliertere Analyse der Fehler, die zurückgegeben werden?

Was mache ich falsch?

// 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)); 

bearbeiten

Der Fehler:

{ 
    "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" 
     } 
    ] 
    } 
} 

Antwort

1

Okay, ich dies endlich herausgefunden.

Ich baute die Zeilen falsch. Sie müssen RowData und CellData entsprechend verwenden.

Das Endergebnis bestand darin, zuerst eine UpdateSheetProperties-Anforderung und eine UpdateCellsRequest zu erstellen.

$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 
      )) 
     )) 
    )); 

Dann fügen Sie die Zeilen in die updateCellsRequest Objekt:

$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); 

Und schließlich Erstellen Sie das Objekt Batch-Anfrage:

// 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); 
Verwandte Themen