使用 Google 工作表 API 复制整个电子表格
Duplicate whole spreadsheed using Google Sheets API
我有一个 spreadsheet,其中包含准备好的模板和一堆与 sheet 一起使用的 Apps 脚本代码。我需要使用 Google 工作表 API 将数据导出到此模板中,但以相同的传播方式 sheet 对所有用户执行此操作并不是最好的主意。因此,我需要为每个用户创建一个新的 spreadsheet。我设法创建了一个空的 spreadsheet,从原始 spreadsheet 复制了模板 sheet 并将其插入到一个新的 spread 中,如下所示:
//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 脚本代码。我也一直在寻找一种方法来以某种方式复制整个旧的 Spreadsheet 并在那里导入数据,但找不到任何东西(但不确定它是否有助于复制 Apps 脚本代码)。是否可以使用 Google Sheets API 复制 Apps 脚本代码并将其插入到新的 Spreadsheet 中?或者如何复制整个点差sheet?
我通过使用 Google 驱动器 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;
}
我有一个 spreadsheet,其中包含准备好的模板和一堆与 sheet 一起使用的 Apps 脚本代码。我需要使用 Google 工作表 API 将数据导出到此模板中,但以相同的传播方式 sheet 对所有用户执行此操作并不是最好的主意。因此,我需要为每个用户创建一个新的 spreadsheet。我设法创建了一个空的 spreadsheet,从原始 spreadsheet 复制了模板 sheet 并将其插入到一个新的 spread 中,如下所示:
//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 脚本代码。我也一直在寻找一种方法来以某种方式复制整个旧的 Spreadsheet 并在那里导入数据,但找不到任何东西(但不确定它是否有助于复制 Apps 脚本代码)。是否可以使用 Google Sheets API 复制 Apps 脚本代码并将其插入到新的 Spreadsheet 中?或者如何复制整个点差sheet?
我通过使用 Google 驱动器 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;
}