尝试复制整个电子表格,但我想没有api可以这样做。
基本上,我正在努力做到以下几点:
创建新的电子表格可以正常工作,但是从电子表格复制工作表不起作用。
尝试了两种方式:
角:
$http.post("https://sheets.googleapis.com/v4/spreadsheets/"+fromSpreadsheetId+"/sheets/"+fromSheetId,
{headers: {
'Authorization': 'Bearer ' + this.oauthToken
}},
给出以下错误:
对预检请求的响应未通过访问控制检查:否'Access-Control-Allow-Origin'
Google表格Api电话:
gapi.client.sheets.spreadsheets.sheets.copyTo({spreadsheetId: fromSpreadsheetId , sheetId: fromSheetId},{destinationSpreadsheetId: destinationSpreadsheetId});
请求没有任何错误。但是,新创建的电子表格没有复制工作表。
答案 0 :(得分:5)
您可能想要专门针对CORS问题提出单独的问题,因为这是一个单独的问题。
关于“复制电子表格”,您有两种选择:
1)使用Drive API的files.copy方法。 Drive API中的=""
相当于Sheets API中的apply('="{}".format)
。
2)请勿使用您复制的“模板”电子表格。而是使用Sheet API的spreadsheets.create方法。您可以使用spreadsheets.get检索“模板”JSON,并可以在创建新电子表格之前根据需要进行调整。
答案 1 :(得分:1)
我也遇到过这个问题,所以就像之前写的那样,最好的,也许是唯一正确的方法是使用 Drive API 的 files.copy 方法。这是 PHP 示例,您可以这样做:
function copySpreadSheet(string $spreadsheetId, string $title, string email) {
$serviceSheets = new Google_Service_Sheets(getGoogleClient());
$serviceDrive = new Google_Service_Drive(getGoogleClient());
$fileCopy = $serviceDrive->files->copy($spreadsheetId, new Google_Service_Drive_DriveFile());
insertPermission($serviceDrive, $fileCopy->getId(), $email, 'user', 'owner');
$requests = [
'updateSpreadsheetProperties' => [
'properties' => [
'title' => $title,
],
'fields' => 'title'
]
];
$requestBody = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest([
'requests' => $requests,
]);
$response = $serviceSheets->spreadsheets->batchUpdate($fileCopy->getId(), $requestBody);
return $serviceSheets->spreadsheets->get($fileCopy->getId());
}
如有必要,这里是 insertPermission()
代码:
function insertPermission(Google_Service_Drive $service, string $fileId, string $email, string $type, string $role) {
$newPermission = new Google_Service_Drive_Permission([
'type' => $type,
'role' => $role,
'emailAddress' => $email,
]);
return $service->permissions->create($fileId, $newPermission, [
'fields' => 'id',
'transferOwnership' => 'true',
]
);
}