PHP Googleスプレッドシートをフォルダーに保存するには?

ショコラ
ショコラ

PHP Googleスプレッドシートをフォルダーに保存するには?

どうも、いきなりフォルダー内にファイルを作成することができないらしい、
ルートでファイルを作成して、updateでファイルを移動するようです。

もっさん先輩
もっさん先輩

スプレッドシートを作成してフォルダーに移動する例です。

$client = new \Google\Client();
$client->setScopes([\Google_Service_Drive::DRIVE,\Google_Service_Sheets::SPREADSHEETS]); // スコープを指定

// サービスアカウントの認証情報を使用してGoogleクライアントをインスタンス化
$auth = tempnam(sys_get_temp_dir(),'auth-');
file_put_contents($auth,$this->api_google_credentials_json);
$client->setAuthConfig($auth);
unlink($auth);

$service = new \Google_Service_Drive($client);

// フォルダーを作成するためのメタデータを指定
$folderMetadata = new \Google_Service_Drive_DriveFile([
  'name'     => 'New Folder',                        // フォルダー名
  'mimeType' => 'application/vnd.google-apps.folder' // フォルダーのMIMEタイプ
]);
// フォルダーを作成
$folder = $service->files->create($folderMetadata,[
  'fields' => 'id',
]);

// フォルダーを共有
$drive_permission = new \Google_Service_Drive_Permission([
  'emailAddress' => 'mossan@answroz.com',
  'type'         => 'user',
  'role'         => 'writer',
]);
$service->permissions->create($folder->id,$drive_permission,[
  'transferOwnership'=> false,
]);

// シートを作成
$sheetService   = new \Google_Service_Sheets($client);
$newSpreadsheet = $sheetService->spreadsheets->create(
  new \Google_Service_Sheets_Spreadsheet([
    'properties' => [
      'title' => 'test',
    ]
  ])
);

// シートの親フォルダーを取得
$file = $service->files->get($newSpreadsheet->spreadsheetId,[
  'fields'=>'parents',
]);
$previousParents = implode(',',$file->parents);

// シートファイルを買取オプションフォルダーに移動する
$service->files->update(
  $newSpreadsheet->spreadsheetId,
  new \Google_Service_Drive_DriveFile(),
  ['addParents'=> $folder->id,'removeParents'=> $previousParents]);

フォルダーを作成しない場合

// フォルダーの有無を確認
$folder_name = '画像';
$query = "mimeType='application/vnd.google-apps.folder' and name='{$folder_name}'";
$optParams = [
  'q' => $query,
  'fields' => 'files(id, name)',
];
$results = $service->files->listFiles($optParams);
if (1 <= count($results->files)) {
  $folderId = $results->files[0]->id;
  dd( $folderId );
}

以上

関連記事

Scroll to Top