使用Google Sheets API复制整个spreadsheed



我有一个电子表格,里面有准备好的模板和一堆应用程序脚本代码来处理工作表。我需要使用GoogleSheetsneneneba 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);

这很有效,我也可以在其中写入数据,但问题是,我无法复制应用程序脚本代码。我也一直在寻找一种方法,以某种方式复制整个旧的电子表格并在那里导入数据,但找不到任何东西(但不确定复制应用程序脚本代码是否有帮助(。是否可以使用Google Sheets API复制应用程序脚本代码并将其插入新的电子表格?或者我如何复制整个电子表格?

我使用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');

工作起来很有魅力!

EDIT:这是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;
}

最新更新