19
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Apps Scriptで指定したフォルダへ直接スプレッドシートを作成する

Last updated at Posted at 2016-10-31

概要

本投稿では、Google Apps Script (GAS)を使ってGoogle Drive APIで直接指定したフォルダへスプレッドシートを作成する方法についてご紹介します。

これまでGASを用いてスプレッドシートを作成しようとするとき、基本はSpreadsheetAppクラスを利用していました。この場合、DriveAppのようにフォルダ指定でのファイル作成ができないため、スプレッドシートを指定したフォルダへ作成しようとすると、一度ルートへ作成した後に指定したフォルダへ移動させ、ルートにあるスプレッドシートを消去するという操作を行います。すなわち、下記のようになっています。

  • SpreadsheetAppはスプレッドシートを作成することはできますが、ファイル操作はできません。

  • DriveAppはファイル操作はできますが、スプレッドシートを作成することはできません。

上記のため、SpreadsheetAppとDriveAppの両方を使用した方法を使っていました。DriveAppにはファイル作成時のmimeTypeとして「GOOGLE_SHEETS」というものがあるのですが、”Google MIME の作成に「DriveApp.createFile()」は使用できません。高度な Advanced Drive サービスをご利用ください。” とのエラーが発生してしまいます。ここで止まっていました。

丁度時間ができましたので「高度な Advanced Drive」とともに他に直接作成する方法はないかといろいろ探していましたところ、Drive APIに当たりました。Drive APIは主に外部からGoogle Driveを使用するためのものとして紹介されていました。これを利用して解決に至りました。

手順

GASからDrive APIを利用するためには下記2点の設定が必要です。

  1. プロジェクトを開いて、上部の 「リソース」 - 「Googleの拡張サービス」  - 「Drive API」をONにする。

  2. Googleデベロッパーコンソールのライブラリにて 「Google Drive API」 を検索して有効にする。

上記はプロジェクト単位で設定する必要があります。

スプレッドシートを指定したフォルダへ作成するためのスクリプトは下記の通りです。

  Drive.Files.insert({
      "title":    ファイル名,
      "mimeType": "application/vnd.google-apps.spreadsheet",
      "parents":  [{"id": フォルダID}]
  });

フォルダIDは、ブラウザからフォルダを見たときのURLの https://drive.google.com/drive/folders/「この部分」 です。

上記のmimeTypeを変更することでスプレッドシート以外にもいろいろ作成することができます。サポートされているmimeTypeはこちらで確認することができます。

参考サイト
https://developers.google.com/apps-script/guides/services/advanced#enabling_advanced_services

少し気になった

タイトルに「Google Apps Scriptで指定したフォルダへ直接スプレッドシートを作成する」と書いてしまいましたが、「直接」という表現で問題ないかどうか少し不安です。

追記

スプレッドシートを作成した後のアクセス方法について追記します。

スプレッドシートを作成するとオブジェクトとしてその情報が返されますので、その中からファイルidを取得することができます。

  var ss = Drive.Files.insert({
      "title":    ファイル名,
      "mimeType": "application/vnd.google-apps.spreadsheet",
      "parents":  [{"id": フォルダID}]
  });

  var sheet = SpreadsheetApp.openById(ss.id);
  SpreadsheetApp.setActiveSpreadsheet(sheet);

ファイルidが分かればフォルダ情報は不要になりますので、スプレッドシートへのアクセスはSpreadsheetAppクラスを使って行うことができます。

19
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?