问题
I'm newbie on this, I create a Google Sheets and put some content there using PHP API:
$id_file = "XXXXXXXXxxxxXXXXXXXXxxx"; //ID sheet
$range = "A2:E2";
$values = [["INGLÉS","ESPAÑOL","DEFINICIÓN","FUENTE","COMENTARIOS"]];
$range1 = "A1:E1";
$values1 = [["GLOSARIO"]];
$data = [];
$data1 = [];
$data[] = new Google_Service_Sheets_ValueRange([
'range' => $range,
'majorDimension' => 'ROWS',
'values' => $values
]);
$requestBody = new Google_Service_Sheets_BatchUpdateValuesRequest([
"valueInputOption" => "USER_ENTERED",
"data" => $data
]);
$response = $service->spreadsheets_values->batchUpdate($id_file, $requestBody);
$data1[] = new Google_Service_Sheets_ValueRange([
'range' => $range1,
'majorDimension' => 'ROWS',
'values' => $values1
]);
$requestBody1 = new Google_Service_Sheets_BatchUpdateValuesRequest([
"valueInputOption" => "USER_ENTERED",
"data" => $data1
]);
$response1 = $service->spreadsheets_values->batchUpdate($id_file, $requestBody1);
I obtain this result:
It works great but I would like to merge cells and some formatting on the first row, I would like a result like this:
Looking some information I tried with this:
$rangel = new Google_Service_Sheets_GridRange();
$rangel->setStartRowIndex(0);
$rangel->setEndRowIndex(1);
$rangel->setStartColumnIndex(0);
$rangel->setEndColumnIndex(5);
$rangel->setSheetId(0);
$request = new Google_Service_Sheets_MergeCellsRequest();
$request->setMergeType('MERGE_COLUMNS');
$request->setRange($range1);
$batchUpdateRequest = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest();
$batchUpdateRequest->setRequests($request);
$response = $service->spreadsheets->batchUpdate($id_file,$batchUpdateRequest);
But it doesn't work, How can I fix it?
I'd like some help.
回答1:
- You want to merge the cells of "A1:E1" of Spreadsheet using Sheets API with php.
If my understanding is correct, how about this modification? I think that your below script is almost correct. It is required to be modified a little. Please modify it as follows.
Modified script:
$rangel = new Google_Service_Sheets_GridRange();
$rangel->setStartRowIndex(0);
$rangel->setEndRowIndex(1);
$rangel->setStartColumnIndex(0);
$rangel->setEndColumnIndex(5);
$rangel->setSheetId(0);
$request = new Google_Service_Sheets_MergeCellsRequest();
$request->setMergeType('MERGE_ROWS'); // Modified
$request->setRange($rangel); // Modified
$body = new Google_Service_Sheets_Request(); // Added
$body->setMergeCells($request); // Added
$batchUpdateRequest = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest();
$batchUpdateRequest->setRequests($body); // Modified
$response = $service->spreadsheets->batchUpdate($id_file,$batchUpdateRequest);
Additional sample script:
If you want to merge the cells and change the horizontal alignment to center like your image, how about the following sample script?
Sample script:// Range
$rangel = new Google_Service_Sheets_GridRange();
$rangel->setStartRowIndex(0);
$rangel->setEndRowIndex(1);
$rangel->setStartColumnIndex(0);
$rangel->setEndColumnIndex(5);
$rangel->setSheetId(0);
// Merge rows of "A1:E1".
$request1 = new Google_Service_Sheets_MergeCellsRequest();
$request1->setMergeType('MERGE_ROWS');
$request1->setRange($rangel);
$body1 = new Google_Service_Sheets_Request();
$body1->setMergeCells($request1);
// Change horizontalAlignment to "CENTER".
$cellFormat = new Google_Service_Sheets_CellFormat();
$cellFormat->setHorizontalAlignment('CENTER');
$cellData = new Google_Service_Sheets_CellData();
$cellData->setUserEnteredFormat($cellFormat);
$rowData = new Google_Service_Sheets_RowData();
$rowData->setValues([$cellData]);
$rows[] = $rowData;
$request2 = new Google_Service_Sheets_UpdateCellsRequest();
$request2->setRows($rows);
$request2->setFields('userEnteredFormat.horizontalAlignment');
$request2->setRange($rangel);
$body2 = new Google_Service_Sheets_Request();
$body2->setUpdateCells($request2);
$batchUpdateRequest = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest();
$batchUpdateRequest->setRequests([$body1, $body2]);
$response = $service->spreadsheets->batchUpdate($id_file, $batchUpdateRequest);
Note:
- This modified script and sample script suppose that Sheets API has already been able to be used.
References:
- MergeCellsRequest
- UpdateCellsRequest
- PHP Quickstart
If I misunderstood your question and this was not the result you want, I apologize.
来源:https://stackoverflow.com/questions/56549822/how-to-merge-cells-using-google-sheets-api-with-php