这需要使用 Google Sheets API 和 PHP 我有一个单例包装类(让我们面对现实吧,大多数 Google PHP api 都需要它们),我的客户端类中的一个实例是
$gsheets
我之前已经进行过此工作,并且仍然证明我具有 API 访问权限,我通过运行创建一个新的电子表格:
$newspreadsheetTitle="ABC123456";
$newdocument = $gsheets->newSpreadsheetDocument($newspreadsheetTitle);
它调用我自己的包装类方法:
public function newSpreadsheetDocument($title) {
$newspread = new Google_Service_Sheets_Spreadsheet([
'properties' => [
'title' => $title
]
]);
$newspread = $this->service->spreadsheets->create($newspread);
$id = $newspread->getSpreadsheetId();
return ["ID" => $newspread->getSpreadsheetId(), "url" => $newspread->getSpreadsheetUrl()];
}
此时,新电子表格已创建,标题为 ABC123456,并返回预期的 ID 和 url,可以通过将链接粘贴到浏览器的地址栏来访问,并使用返回的 ID。 这证明
$this->service
是我的包装类中功能齐全的 Google Sheets 客户端,并创建一个名为 $spreadsheetRef 的电子表格文档。
现在我的问题是:
然后我希望将此模板中的内容(整个选项卡/工作表)复制到这个新创建的电子表格中,所以我打电话
$gsheets->copySheetFromTo($POtemplateID, $newdocument["ID"], 0);
我的包装实例方法
public function copySheetFromTo($sourceSpreadsheetFileId, $destinationSpreadsheetFileId, $sourceTabRef) {
$requestBody = new Google_Service_Sheets_CopySheetToAnotherSpreadsheetRequest();
$requestBody->setDestinationSpreadsheetId($destinationSpreadsheetFileId);
$response = $this->service->spreadsheets_sheets->copyTo($sourceSpreadsheetFileId, $sourceTabRef, $requestBody);
/*
$request = new Google_Service_Sheets_CopySheetToAnotherSpreadsheetRequest([
"destinationSpreadsheetId" => $toFileID
]);
$this->service->spreadsheets_sheets->copyTo($fromFileID, $fromTabName, $request);
*/
return $response;
}
我尝试了几种排列,例如
$gsheets->copySheetFromTo($POtemplateID, $newdocument["ID"], 0);
错误:
The sheet (0) does not exist.
和
$gsheets->copySheetFromTo($POtemplateID, $newdocument["ID"], 1);
错误:
The sheet (1) does not exist.
和
$gsheets->copySheetFromTo($POtemplateID, $newdocument["ID"], "template_sheet");//the name of the sheet tab to copy
错误
Invalid value at 'sheet_id' (TYPE_INT32), "template_sheet"
请有人告知这里哪些参数不正确。
关于您的显示脚本,
$sourceTabRef
必须是源电子表格中源工作表的工作表 ID。 参考
但是,从您的错误消息
The sheet (0) does not exist.
和The sheet (1) does not exist.
来看,我担心您要复制的工作表的工作表ID可能与0
和1
不同。所以,请再次确认。
此外,文本
template_sheet
也不能用作工作表ID。也请大家注意这一点。
您可以在这个官方文档的电子表格的URL中看到sheet ID。
https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit?gid=SHEET_ID#gid=SHEET_ID
$this->service
可以使用Sheet API并访问电子表格,那么您的脚本copySheetFromTo
就可以工作。当我测试它时,我确认该脚本可以使用有效的工作表 ID 来工作$sourceTabRef
。