【问题标题】:Google Sheets API Insert Row at a Row PositionGoogle Sheets API 在行位置插入行
【发布时间】:2020-07-23 12:18:18
【问题描述】:

我正在使用 Google API 向 Google 表格添加行。这一切都运行良好,但新行被添加到末尾(使用 append 方法)。

我想在标题下方的顶部插入行,在我的例子中是第 2 行。

这是我添加到末尾的工作代码。如何指定要在给定位置插入行的位置。

        putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $CredentialFile);

        $client = new \Google_Client;
        $client->useApplicationDefaultCredentials();

        $client->setApplicationName("MyApp");
        $client->setScopes(['https://www.googleapis.com/auth/drive','https://spreadsheets.google.com/feeds']);

        if ($client->isAccessTokenExpired()) {
            $client->refreshTokenWithAssertion();
        }

        $accessToken = $client->fetchAccessTokenWithAssertion()["access_token"];

        ServiceRequestFactory::setInstance(new DefaultServiceRequest($accessToken));
        
        $SheetId = "MySheetId";
        
        $service = new \Google_Service_Sheets($client);
        $sheet = $service->spreadsheets->get($SheetId);
        $sheets = $sheet->getSheets();
        
        $SheetTitle = $sheets[0]->properties->title;
        
        $range = "{$SheetTitle}!A:D";

        $values = [];
        $row = [];
        $row[] = "Tom";
        $row[] = "Thumb";
        $row[] = "tomthumb";
        $row[] = "tom@thumb.com"

        $values[] = $row;

        $body = new \Google_Service_Sheets_ValueRange([
            'values' => $values                    
        ]);
        
        $params = [
            'valueInputOption' => "RAW"
        ];

        $result = $service->spreadsheets_values->append($SheetId, $range, $body, $params);

【问题讨论】:

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


    【解决方案1】:

    您正在使用values.append,它根据定义将值附加到第一个空行

    如果要将值插入不是工作表第一个空行的范围内,则需要改用 values.batchUpdate 方法

    示例:

    $range="Sheet1!A2:D2";
    $values = array(
      array(
        "Tom", "Thumb", "tomthumb", "tom@thumb.com"
      )
    );
    $data = array();
    
    $data[] = new Google_Service_Sheets_ValueRange(array(
      'range' => $range,
      'values' => $values
      )
    );
    
    $body = new Google_Service_Sheets_BatchUpdateValuesRequest(array(
      'valueInputOption' => 'RAW',
      'data' => $data
      )
    );
    $result = $service->spreadsheets_values->batchUpdate($SheetId, $body);
    

    更新

    • 如果您想插入包含数据的行,而不是将数据粘贴到已经存在的行中 - 您需要先创建附加行。

    这可以通过InsertDimensionRequest 来完成。

    示例:

    $request = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest(array(
            'requests' => array(
                'insertDimension' => array(
                    'range' => array(
                                  "startIndex": 1,
                                  "endIndex": 2,
                                  "dimension": "ROWS",
                                  "sheetId": 0
                    )
                )
            )
        ));
    $request->setRequests($body); 
    $result = $service->spreadsheets->batchUpdate($SheetId, $request);
    

    【讨论】:

    • 谢谢 - 我已经尝试过了,但它覆盖了当前位于第 2 行的数据。如何让它插入新行?谢谢
    • 我明白了,如果你想在用值填充之前插入一个新行,你需要执行两个请求 - 我现在将更新我的答案以展示如何做到这一点。
    • 感谢您发布此内容 - Sheets API 文档对于如何执行此类简单操作非常沉默
    • @ziganotschka $request->setRequests($body); 导致错误。 "message": "Invalid JSON payload received. Unknown name \"valueInputOption\" at 'requests': Cannot find field.\nInvalid JSON payload received. Unknown name \"data\" at 'requests': Cannot find field."。它只有在我将它们分成 2 个调用时才有效。
    • 更改值和添加行使用不同的 URL,是否可以组合它们? developers.google.com/sheets/api/samples/writingPOST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values:batchUpdatedevelopers.google.com/sheets/api/samples/rowcolumnPOST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
    猜你喜欢
    • 1970-01-01
    • 2015-10-23
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多