#php #api #google-apps-script #google-sheets #google-sheets-api
#php #API #google-apps-script #google-sheets #google-sheets-api
Вопрос:
У меня есть электронная таблица с подготовленным шаблоном и кучей кода скрипта приложений для работы с таблицами. Мне нужно экспортировать данные в этот шаблон с помощью API Google Sheets, но делать это в одной и той же таблице для всех пользователей — не лучшая идея. Поэтому мне нужно создать новую электронную таблицу для каждого пользователя. Мне удалось создать пустую электронную таблицу, скопировал шаблон таблицы из исходной таблицы и вставил его в новую, например:
//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);
Это работает, и я также могу записывать в него данные, но проблема в том, что я не могу скопировать код скрипта приложений. Я также искал способ каким-то образом дублировать всю старую электронную таблицу и импортировать туда данные, но ничего не смог найти (не уверен, помогает ли это копировать коды сценариев приложений). Можно ли скопировать коды сценариев приложений с помощью API Google Sheets и вставить их в новую электронную таблицу? Или как мне дублировать всю электронную таблицу?
Комментарии:
1. Использовать Drive api? Обратите внимание, что копирование кода не означает, что это тот же проект — это копия, и ее необходимо авторизовать снова.
2. Является ли проект Apps Script автономным или связанным с контейнером проектом?
3. @TheMaster Да, мне нужно сделать из нее отдельную электронную таблицу. Затем я делюсь им с зарегистрированным пользователем, чтобы они могли просматривать и редактировать данные по своему усмотрению
4. @Aerials Шаблон представляет собой стандартную электронную таблицу Google. Скрипт приложения добавляется вручную
5. Вы хотите создать новую таблицу для каждого из пользователей? И будут ли эти таблицы храниться на вашем диске? Почему бы, например, не использовать таблицу шаблонов и не создать новую внутреннюю таблицу для данных каждого пользователя?
Ответ №1:
Я решил эту проблему с помощью API Google Диска и скопировал файл оттуда:
$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;
}