【问题标题】:How to merge cells using Google Sheets API with PHP?如何使用 Google Sheets API 和 PHP 合并单元格?
【发布时间】:2019-06-11 18:34:15
【问题描述】:

我是这方面的新手,我创建了一个 Google 表格并使用 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);

我得到这个结果:

效果很好,但我想在第一行合并单元格和一些格式,我想要这样的结果:

查看我尝试过的一些信息:

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

但它不起作用,我该如何解决它?

我需要一些帮助。

【问题讨论】:

    标签: php google-sheets google-api google-drive-api google-sheets-api


    【解决方案1】:
    • 您希望使用 Sheets API 和 php 合并电子表格“A1:E1”的单元格。

    如果我的理解是正确的,那么这个修改呢?我认为您的以下脚本几乎是正确的。需要稍作修改。请修改如下。

    修改脚本:

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

    附加示例脚本:

    如果您想合并单元格并将水平对齐更改为像您的图像一样居中,那么下面的示例脚本怎么样?

    示例脚本:
    // 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 已经可以使用。

    参考资料:

    如果我误解了您的问题并且这不是您想要的结果,我深表歉意。

    【讨论】:

    • 是的!你是对的!我应用了您的代码并且它可以工作,但我也想应用像图像这样的格式。我尝试使用 Google_Service_Sheets_Color 例如:$bgColor = new Google_Service_Sheets_Color(); $bgColor->setRed(0); $bgColor->setGreen(0); $bgColor->setBlue(1); 并添加行 $cellFormat->setBackgroundColor($bgColor); 但它不起作用:/
    • @NekoLopez 感谢您的回复。我很高兴你的问题得到了解决。关于你的新问题,虽然我不确定我是否能正确理解你的情况,如果你想在我下面的脚本中添加$cellFormat->setBackgroundColor($bgColor);,请将$request2->setFields('userEnteredFormat.horizontalAlignment');修改为$request2->setFields('userEnteredFormat.horizontalAlignment,userEnteredFormat.backgroundColor');,然后重新测试。如果我误解了你的情况,你能提供整个脚本吗?我想确认这个问题。
    • 感谢您的回复,我应用了该更改并且效果很好!我还尝试增加标题的字体大小,因此我不得不查找一些信息并根据此使用Google_Service_Sheets_TextFormat链接:developers.google.com/resources/api-libraries/documentation/… Domo arigato!
    • 我有一个问题,如果我想在第二行应用格式(A2:E2),只是居中加粗,我该如何定义呢?
    • @NekoLopez 感谢您的回复。我很高兴您最初的问题和其他问题得到了解决。关于您的新问题,这与您最初的问题不同。那么您可以将其发布为新问题吗?通过将其发布为新问题,包括我在内的用户可以想到您的新问题。如果您能合作解决您的新问题,我很高兴。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多