我有一个电子表格,其中包含准备好的模板和一堆用于处理工作表的 Apps 脚本代码。我需要使用 Google Sheets API 将数据导出到此模板中,但在同一个电子表格中为所有用户执行此操作并不是最好的主意。因此,我需要为每个用户创建一个新的电子表格。我设法创建一个空电子表格,从原始电子表格复制模板表并将其插入新电子表格中,如下所示:
//Creating new Spreadsheet
$service = new Google_Service_Sheets($client);
$serviceDrive = new Google_Service_Drive($client);
$spreadsheet = new Google_Service_Sheets_Spreadsheet([
'properties' => [
'title' => Lang::get('pls.export.spreadsheet_name'),
]
]);
$spreadsheet = $service->spreadsheets->create($spreadsheet, [
'fields' => 'spreadsheetId'
]);
//Copying sheet from template
$sourceSpreadsheet = 'spreadsheet id goes here';
$soureSheet = 'sheet id goes here';
$requestBody = new Google_Service_Sheets_CopySheetToAnotherSpreadsheetRequest(['destinationSpreadsheetId' => $spreadsheet->spreadsheetId]);
$response = $service->spreadsheets_sheets->copyTo($sourceSpreadsheet, $soureSheet, $requestBody);
这可行,我也可以在其中写入数据,但问题是,我无法复制 Apps 脚本代码。我也一直在寻找一种方法来以某种方式复制整个旧电子表格并在那里导入数据,但找不到任何东西(但不确定它是否有助于复制 Apps 脚本代码)。是否可以使用 Google Sheets API 复制 Apps 脚本代码并将其插入新的电子表格中?或者如何复制整个电子表格?
我通过使用 Google Drive API 解决了这个问题,并从那里复制了文件:
$serviceDrive = new Google_Service_Drive($client);
$drive = new Google_Service_Drive_DriveFile();
$spreadsheet = $serviceDrive->files->copy('your spreadsheet id', $drive);
然后将创建的文件分享给用户,如下所示:
$this->insertPermission($serviceDrive, $spreadsheet->id, $user->email, 'user', 'writer');
就像魅力一样!
编辑:这是 insertPermission 函数
function insertPermission($service, $fileId, $value, $type, $role)
{
$newPermission = new Google_Service_Drive_Permission();
$newPermission->setEmailAddress($value);
$newPermission->setType($type);
$newPermission->setRole($role);
try {
return $service->permissions->create($fileId, $newPermission);
} catch (Exception $e) {
print $e->getMessage();
}
return NULL;
}