首页 > 解决方案 > Google Sheets API 在行位置插入行

问题描述

我正在使用 Google API 向 Google Sheet 添加行。这一切都很好,但是新行被添加到最后(使用 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);

标签: phpgoogle-sheetsgoogle-sheets-api

解决方案


您正在使用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);

推荐阅读