【发布时间】:2021-04-14 00:24:49
【问题描述】:
我有 2 个谷歌电子表格文档,MainSpreadsheet 和 SecondarySpreadSheet。 MainSpreadsheet 有很多行,其中一些我需要复制并保留样式格式。所以我需要从 MainSpreadSheet 中取出一些特定的行,然后使用 Google API PHP 将它们粘贴到 SecondarySpreadSheet 中。我正在尝试使用类名 Google_Service_Sheets_CopyPasteRequest() 但我无法解决问题。你们能帮我复制和粘贴与 MainSpreadsheet 相同的格式样式吗? 感谢你们的时间。
$newSpreadSheetID = '12345' ;
$mainSpreadSheetID = '54321';
$client = new \Google_Client();
$client->setApplicationName('NAME');
$client->setScopes([\Google_Service_Sheets::SPREADSHEETS]);
$client->setAccessType('offline');
$client->setAuthConfig('credentials.json');
$service = new Google_Service_Sheets($client);
/**
* Copy from the Main Sheet
*/
$mainFirstSheetID = null;
$worksheetSheets = $service->spreadsheets->get($mainSpreadSheetID)->sheets;
foreach($worksheetSheets as $sheet){
$mainFirstSheetID = $sheet->properties['sheetId'];
}
$copyRange = new Google_Service_Sheets_GridRange();
$copyRange->setSheetId($mainFirstSheetID);
$copyRange->setStartRowIndex(10);
$copyRange->setEndRowIndex(11);
$copyRange->setStartColumnIndex(0);
$copyRange->setEndColumnIndex(400);
/**
* Paste in the new SHEET
*/
$newSheetID = null;
$worksheetSheets = $service->spreadsheets->get($newSpreadSheetID)->sheets;
foreach($worksheetSheets as $sheet){
$newSheetID = $sheet->properties['sheetId'];
}
$pasteRange = new Google_Service_Sheets_GridRange();
$pasteRange->setSheetId($newSheetID);
$pasteRange->setStartRowIndex(10);
$pasteRange->setEndRowIndex(11);
$pasteRange->setStartColumnIndex(0);
$pasteRange->setEndColumnIndex(400);
$copypasteRequest = new Google_Service_Sheets_CopyPasteRequest();
$copypasteRequest->setSource($copyRange);
$copypasteRequest->setDestination($pasteRange);
$request = new Google_Service_Sheets_Request();
$request->setCopyPaste($copypasteRequest);
$batchUpdateRequest = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest();
$batchUpdateRequest->setRequests($request);
$newSpreadsheet = $service->spreadsheets->get($newSpreadSheetID);
$mainSpreadsheet = $service->spreadsheets->get($mainSpreadSheetID);
$finalRowRange = $newSpreadsheet->range;
$finalRowStartPosition = strpos($newSpreadsheet->range,':') + 2;
$finalRow = intval(substr($finalRowRange,$finalRowStartPosition));
if($finalRow <= $pasteRange['startRowIndex']){
$appendDimensionRequest = new Google_Service_Sheets_AppendDimensionRequest();
$appendDimensionRequest->setSheetId($newSheetID);
$appendDimensionRequest->setDimension("ROWS");
$appendDimensionRequest->setLength(1);
$appendRequest = new Google_Service_Sheets_Request();
$appendRequest->setAppendDimension($appendDimensionRequest);
$appendEmptyRowBatchUpdateRequest = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest();
$appendEmptyRowBatchUpdateRequest->setRequests($appendRequest);
$service->spreadsheets->batchUpdate($newSpreadSheetID, $appendEmptyRowBatchUpdateRequest);
}
$service->spreadsheets->batchUpdate($newSpreadSheetID, $batchUpdateRequest);
$service->spreadsheets_values->update(
$newSpreadSheetID,
$finalRow,
$copypasteRequest
);
【问题讨论】:
-
你能展示你当前的脚本吗?而且,不幸的是,来自
So I need to take some specific rows from the MainSpreadSheet and paste them in the SecondarySpreadSheet using Google API PHP.,我无法理解您目标的细节。我为此道歉。另外,您能否提供您期望的示例输入和输出情况? -
我正在使用与此类似的代码。但这对我不起作用。 =>stackoverflow.com/questions/59212745/…
-
感谢您的回复。来自
I was using the code similar to this one.,关于您当前的脚本,您可以将其添加到您的问题中吗?而且,我必须为我糟糕的英语水平道歉。不幸的是,从您的回复中,来自So I need to take some specific rows from the MainSpreadSheet and paste them in the SecondarySpreadSheet using Google API PHP.,我仍然无法理解您目标的细节。我为此道歉。另外,您能否提供您期望的示例输入和输出情况? -
完成,谢谢。你能理解我是如何试图从代码中删除 $this-> 的吗?
-
感谢您回复并添加更多信息。我可以确认您的 2 个样本电子表格。在您的目标中,您希望从“MAIN SHEET”的电子表格中检索特定行,并希望将该行复制到“NEW SHEET”电子表格的第一个空行。我的理解正确吗?如果我的理解是正确的,在您的实际情况下,您会从“MAIN SHEET”中检索多行吗?或者,您希望每次运行只检索一行?
标签: php google-sheets google-sheets-formula google-sheets-api google-api-php-client