Как объединить ячейки с помощью API Google Sheets с PHP? - PullRequest
1 голос
/ 11 июня 2019

Я новичок в этом, я создаю Google Sheets и помещаю туда контент, используя 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);

Я получаю такой результат:

enter image description here

Это прекрасно работает, но я хотел бы объединить ячейки и некоторое форматирование в первой строке, я хотел бы получить такой результат:

enter image description here

Просматривая некоторую информацию, которую я пробовал с этим:

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

Но это не работает, Как я могу это исправить?

I 'Мне нужна помощь.

1 Ответ

1 голос
/ 12 июня 2019
  • Вы хотите объединить ячейки "A1: E1" электронной таблицы с помощью API Sheets с php.

Если мое понимание верно, как насчет этой модификации?Я думаю, что ваш сценарий ниже почти правильный.Требуется немного доработаться.Пожалуйста, измените его следующим образом.

Модифицированный скрипт:

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

Дополнительный пример скрипта:

Если вы хотите объединить ячейки и изменить горизонтальное выравнивание по центру, как вашimage, как насчет следующего примера сценария?

Пример сценария:
// 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);

Примечание:

  • Этот измененный сценарий и пример сценария предполагают, что Sheets API уже можно использовать.

Ссылки:

Если я неправильно понял ваш вопрос, и это был не тот результат, который вы хотите, я прошу прощения.

...