Я хочу создать копию листа Excel документа Google, используя PHP API. Я могу видеть код Java, но не код PHP вообще 🙁
На самом деле у меня уже есть лист Excel на диске Google. Я хочу показать его на веб-сайте, я уже успешно его выполнил, но проблема в том, что один и тот же файл виден всем, и если один пользователь изменяет файл и в то же время может видеть тот же самый пользователь это меняется, поскольку он синхронизируется с Google Drive.
Поэтому я решил, что если я смогу создать копию листа и показать разные копии по 2 копии каждому пользователю через PHP API.
===============
Отредактированный код
function copyFile($service, $originFileId, $copyTitle) {
$copiedFile = new Google_DriveFile();
$copiedFile->setTitle($copyTitle);
try {
$arr['convert'] = false;
$arr['visibility'] = 'default';
return $service->files->copy($originFileId, $copiedFile,$arr);
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
return NULL;
}
function insertPermission($service, $fileId, $value, $type, $role) {
$newPermission = new Google_Permission();
$newPermission->setValue($value);
$newPermission->setType($type);
$newPermission->setRole($role);
try {
return $service->permissions->insert($fileId, $newPermission);
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
return NULL;
}function updateRevision($service, $fileId, $revisionId) {
try {
// First retrieve the revision from the API.
$revisions = $service->revisions;
$revision = $revisions->get($fileId, $revisionId);
echo '<pre>';print_r($revision);
$revision->setPinned(true);
return $revisions->update($fileId, $revisionId, $revision);
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
return NULL;
}
function updateRevision1($service, $fileId, $revisionId) {
$patchedRevision = new Google_Revision();
$patchedRevision->setPublished(true);
$patchedRevision->setPublishAuto(true);
$patchedRevision->setPublishedOutsideDomain(true);
try {
return $service->revisions->patch($fileId, $revisionId, $patchedRevision);
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
return NULL;
}require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';$client = new Google_Client();
// Get your credentials from the console
$client->setClientId('clientid');
$client->setClientSecret('secret');
$client->setScopes(array('https://www.googleapis.com/auth/drive'));
$client->setRedirectUri('redirecturi');
$service = new Google_DriveService($client);
if(!isset($_GET['code']) ) {
$authUrl = $client->createAuthUrl();
header('location: '.$authUrl );
die;
}
else{
$authCode = $_GET['code'];
// Exchange authorization code for access token
$accessToken = $client->authenticate($authCode);
$client->setAccessToken($accessToken);
$new_file = copyFile($service,'fileid','Baby Schema');
echo 'file=<pre>';print_r($new_file);
$permission = insertPermission($service,$new_file['id'],'me','anyone','writer');
echo 'permission=<pre>';print_r($permission);
$revision = updateRevision1($service, $new_file['id'], '1');
echo 'pub=<pre>';print_r($revision);
}
Код работает абсолютно идеально, но не делает то, что я хочу.
Приведенный выше код выполняет эти задачи
1) I have one spreadsheet on [email protected]
2) I am creating copy when [email protected] login to my abc.com website.
3) I am setting copy to be public on web.
4) Making copy to be published on web.
Теперь у меня проблема.
1) In the spreadsheet there are 5 sheets out of them 2 are editable and rest 3 are protected so no one can see my formulas.
2) When copy is created by [email protected] then he becomes the owner of file while file is on [email protected] while I want Owner to be bhuvneshgupta not bhuvnesh.gupta because I don't want to show formulas to any one not even bhuvnesh.gupta when file is opened on web.
3) I want to protect 3 sheets of spreadsheet to everyone.
Я использую этот способ для вызова таблицы в Интернете.
<iframe width="100%" height="600" src="https://docs.google.com/spreadsheets/d/fileid/edit?usp=sharing;&rm=minimal"></iframe>
Пожалуйста, помогите мне, ребята. Это последний пункт моего проекта.
Пожалуйста, помогите мне, ребята.
Заранее спасибо!
Справочник по Google Drive API содержит код PhP для копирования файлов.
/**
* Copy an existing file.
*
* @param Google_DriveService $service Drive API service instance.
* @param String $originFileId ID of the origin file to copy.
* @param String $copyTitle Title of the copy.
* @return DriveFile The copied file. NULL is returned if an API error occurred.
*/
function copyFile($service, $originFileId, $copyTitle) {
$copiedFile = new Google_DriveFile();
$copiedFile->setTitle($copyTitle);
try {
return $service->files->copy($originFileId, $copiedFile);
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
return NULL;
}
Это здесь: https://developers.google.com/drive/v2/reference/files/copy#try-it
Других решений пока нет …