LoginSignup
7
5

More than 5 years have passed since last update.

スプレッドシートが存在する同じフォルダに、ファイル出力する

Last updated at Posted at 2016-06-18

Googleスプレッドシートで、Google Apps Scriptを使って、生成した文字列をシートに出力していたが、
文字数が増えて、1セルに5000文字以上だとエラーになってしまうので、ファイル出力するようにした。

やりたいことは、スプレッドシートが存在する同じフォルダに、ファイル出力することである。

REFERENCEを見ながら作成したので、
これが最適かどうかは不明だが、一応動作している。

もっとよいやり方があれば、教えてください。

// --------------------------------------------
// スプレッドシートと同じフォルダに、ファイル出力する。
// --------------------------------------------
// 現在日時を文字列にする。(おまけ。直接関係ない。)
var nowStr = Utilities.formatDate(new Date(), "JST", "yyyyMMddHHmmss");
// ユーザーのルートフォルダにファイルが作られる。(ファイルの中身は、文字列で渡す。)
var newFile = DriveApp.createFile("ABC_" + nowStr + ".txt", "contents");
// ユーザーのルートフォルダを保持しておく。(後で使う)
var originalFolders = newFile.getParents();

// スプレッドシートのファイルIDを取得する。(スプレッドシートのフォルダを取得するため。)
var spreadsheetFileId = SpreadsheetApp.getActiveSpreadsheet().getId();
// スプレッドシートのファイルを取得する。
var spreadsheetFile = DriveApp.getFileById(spreadsheetFileId);
// スプレッドシートの親フォルダのリストを取得する。(スプレッドシートが1つの親フォルダにしかない場合は、1つである。)
var folders = spreadsheetFile.getParents();

// スプレッドシートの親フォルダすべてに、ファイルが見えるようにする。(スプレッドシートが1つの親フォルダにしかない場合は、1つである。)
while (folders.hasNext()) {
    var folder = folders.next();
    folder.addFile(newFile); // ファイル実体は生成されない。フォルダに見えるようになるだけ。
}

// ユーザーのルートフォルダからファイルが見えないようにする。
while (originalFolders.hasNext()) {
    var folder = originalFolders.next();
    folder.removeFile(newFile); // ファイル実体は削除されない。フォルダから見えなくなるだけ。
}
7
5
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
7
5