PHP-Google API复制并粘贴保留原始格式的行

PHP-Google API复制并粘贴保留原始格式的行,php,google-sheets,google-sheets-formula,google-sheets-api,google-api-php-client,Php,Google Sheets,Google Sheets Formula,Google Sheets Api,Google Api Php Client,我有两个谷歌电子表格文档,主电子表格和第二电子表格。主电子表格有很多行,其中一些我需要复制并保持样式格式。因此,我需要从主电子表格中获取一些特定的行,并使用GoogleAPI PHP将它们粘贴到第二个电子表格中。我试图使用类名Google_Service_Sheets_copypesterequest(),但我无法解决这个问题。你们能帮我复制和粘贴相同格式的主电子表格吗? 感谢你们的时间 $newSpreadSheetID = '12345' ; $mainSpreadSheetID = '5

我有两个谷歌电子表格文档,主电子表格和第二电子表格。主电子表格有很多行,其中一些我需要复制并保持样式格式。因此,我需要从主电子表格中获取一些特定的行,并使用GoogleAPI PHP将它们粘贴到第二个电子表格中。我试图使用类名Google_Service_Sheets_copypesterequest(),但我无法解决这个问题。你们能帮我复制和粘贴相同格式的主电子表格吗? 感谢你们的时间

$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
);
$newSpreadSheetID='12345';
$main电子表格ID='54321';
$client=new\Google_client();
$client->setApplicationName('NAME');
$client->setScopes([\Google\u Service\u Sheets::SPREADSHEETS]);
$client->setAccessType('offline');
$client->setAuthConfig('credentials.json');
$service=新的谷歌服务表单($client);
/**
*从主页复制
*/
$mainFirstSheetID=null;
$worksheetSheets=$service->spreadsheets->get($mainseadsheetid)->sheets;
foreach($工作表作为$工作表){
$mainFirstSheetID=$sheet->properties['sheetId'];
}
$copyRange=新Google_服务_表单_网格范围();
$copyRange->setSheetId($mainFirstSheetID);
$copyRange->setStartRowIndex(10);
$copyRange->setEndRowIndex(11);
$copyRange->setStartColumnIndex(0);
$copyRange->setEndColumnIndex(400);
/**
*粘贴到新的工作表中
*/
$newSheetID=null;
$worksheetSheets=$service->spreadsheets->get($newSpreadSheetID)->工作表;
foreach($sheetsheets作为$sheet){
$newSheetID=$sheet->properties['sheetId'];
}
$PasterRange=新Google_服务_表单_网格范围();
$pasteRange->setSheetId($newSheetID);
$PasterRange->setStartRowIndex(10);
$PasterRange->setEndRowIndex(11);
$PasterRange->setStartColumnIndex(0);
$PasterRange->setEndColumnIndex(400);
$copypasteRequest=新Google_服务_表单_copypasteRequest();
$copypasteRequest->setSource($copyRange);
$copypasteRequest->setDestination($pasteRange);
$request=新Google_服务_Sheets_request();
$request->setCopyPaste($copypasteRequest);
$batchUpdateRequest=新Google_服务_工作表_BatchUpdateSpreadsheetRequest();
$batchUpdateRequest->setRequests($request);
$newSpreadsheet=$service->spreadsheets->get($newSpreadSheetID);
$main电子表格=$service->spreadsheets->get($main电子表格ID);
$finalRowRange=$newSpreadsheet->range;
$finalRowStartPosition=strpos($newSpreadsheet->range,“:”)+2;
$finalRow=intval(substr($finalRowRange,$finalRowStartPosition));
如果($finalRow setSheetId($newSheetID));
$appendDimensionRequest->setDimension(“行”);
$appendDimensionRequest->setLength(1);
$appendRequest=新Google_服务_表单_请求();
$appendRequest->setAppendDimension($appendDimensionRequest);
$appendEmptyRowBatchUpdateRequest=新Google_服务_工作表_BatchUpdateSpreadsheetRequest();
$appendEmptyRowBatchUpdateRequest->setRequests($appendRequest);
$service->spreadsheets->batchUpdate($newSpreadSheetID,$appendEmptyRowBatchUpdateRequest);
}
$service->spreadsheets->batchUpdate($newSpreadSheetID,$batchUpdateRequest);
$service->电子表格\u值->更新(
$newSpreadSheetID,
$finalRow,
$copypasteRequest
);

我相信你的目标和你目前的状况如下

  • 您希望将“主工作表”的一行电子表格复制到“新工作表”电子表格的第一个空行
  • 不仅要复制值,还要复制单元格格式
  • 您希望使用googleapis for PHP实现这一点
  • 您已经能够使用Sheets API获取和输入Google电子表格的值
修改点:
  • 不幸的是,batchUpdate方法的“CopyPasteRequest”无法从Google电子表格复制到其他Google电子表格。这似乎是当前的规范

  • 为了将值以及单元格格式从Google电子表格“主表”复制到Google电子表格“新表”,我想提出以下流程

  • 将源电子表格中的源工作表复制到目标电子表格
  • 检索目标工作表的第一个空行号
  • 将格式为的值从复制的工作表复制到目标工作表。然后,删除复制的工作表
这个流来自。但是这是python脚本。所以,为了在PHP中使用这个流,我回答了一个示例脚本。当上面的几点反映到一个脚本中时,它变成如下

示例脚本: 在这个示例脚本中,使用了您的
$service
。因此,请添加授权脚本。并且,请设置运行脚本的变量

$service = new Google_Service_Sheets($client); // <--- This is from your script.

$copiedRowNumber = 16; // Please set the row number of "MAIN SHEET" that you want to copy.
$sourceSpreadsheetId = "###"; // Please set the source Spreadsheet ID.
$sourceSheetId = "0"; // Please set the source sheet ID.
$destinationSpreadsheetId = "###"; // Please set the destination Spreadsheet ID.
$destinationSheetName = "Página1"; // Please set the destination sheet name.
$destinationSheetId = "0"; // Please set the destination sheet ID.

// 1. Copy the source sheet in the source Spreadsheet to the destination Spreadsheet.
$requestBody = new Google_Service_Sheets_CopySheetToAnotherSpreadsheetRequest(
    array("destinationSpreadsheetId" => $destinationSpreadsheetId)
);
$res1 = $service->spreadsheets_sheets->copyTo($sourceSpreadsheetId, $sourceSheetId, $requestBody);
$copiedSheetId = $res1["sheetId"];

// 2. Retrieve 1st empty row number of the destination sheet.
$res2 = $service->spreadsheets_values->get($destinationSpreadsheetId, $destinationSheetName);
$row = count($res2["values"]);

// 3. Copy the values with the format from the copied sheet to the destination sheet. And, delete the copied sheet.
$requests = [
    new \Google_Service_Sheets_Request([
        'copyPaste' => [
            'source' => [
                'sheetId' => $copiedSheetId,
                'startRowIndex' => $copiedRowNumber - 1,
                'endRowIndex' => $copiedRowNumber,
            ],
            'destination' => [
                'sheetId' => $destinationSheetId,
                'startRowIndex' => $row,
                'endRowIndex' => $row + 1
            ],
            'pasteType' => 'PASTE_NORMAL',
        ],
    ]),
    new \Google_Service_Sheets_Request([
        'deleteSheet' => ['sheetId' => $copiedSheetId]
    ])
];
$batchUpdateRequest = new \Google_Service_Sheets_BatchUpdateSpreadsheetRequest(['requests' => $requests]);
$res3 = $service->spreadsheets->batchUpdate($destinationSpreadsheetId, $batchUpdateRequest);
$service=new Google_service_Sheets($client);/$destinationSpreadsheetId)
);
$res1=$service->spreadsheets\u sheets->copyTo($sourceSpreadsheetId,$sourceSheetId,$requestBody);
$copiedSheetId=$res1[“sheetId”];
// 2. 检索目标工作表的第一个空行号。
$res2=$service->spreadsheetname->get($destinationSpreadsheetId,$destinationSheetName);
$row=计数($res2[“值”]);
// 3. 将格式为的值从复制的图纸复制到目标图纸。然后,删除复制的工作表。
$requests=[
新建\谷歌\服务\表单\请求([
“复制粘贴”=>[
“来源”=>[
“sheetId”=>$copiedSheetId,
'startRowIndex'=>$copiedRownNumber-1,
“endRowIndex”=>$copiedRownNumber,
],
“目的地”=>[
“sheetId”=>$destinationSheetId,
“startRowIndex”=>美元行,
'endRowIndex'=>$row+1
],
'pasteType'=>'PASTE_NORMAL',
],
]),
新建\谷歌\服务\表单\请求([
'deleteSheet'=>['sheetId'=>$copiedSheetId]
])
];
$batchUpdateRequest=new\Google\u服务\u工作表\u BatchUpdateSpreadsheetRequest(['requests'=>$requests]);
$res3=$ser