3

Googleフォームから投稿された情報を使用してドキュメントを作成しようとしていますが、ドキュメントを作成した後、ドキュメントを共有フォルダに移動して表示します。GoogleドライブでGoogleスクリプトを使用してファイルを移動する

現時点では、Googleフォームにリンクされているスプレッドシートのすべての情報をスクリプトに取り込んでいます。

var targetFolder = DriveApp.getFolderById(TARGET_FOLDER_ID); 
    var newDoc = DocumentApp.create(requestID + " - " + requestSummary); 

これは私のGoogleドライブのルートフォルダに成功した文書を作成しているが、私はどこでそれを動かすように見えることはできません:私は、ドキュメントを作成するには、次のコードを使用しています、その情報を使用して

それに移動したい。

targetFolder.addFile(newDoc)のような使用方法を示唆する投稿がたくさんありましたが、動作しません。同様に、newDoc.addToFolder(targetFolder)のような例も見ましたが、私。

これまでのオンラインでの質問には、これ以上適用されない以前のAPIバージョンが使用されているようであり、これらの方法は新しいDriveApp機能には適用されません。

可能であれば、上記のように新しい文書を作成して、スクリプトを使用して内容を編集し、そのファイルを共有フォルダに移動できるようにします。 (私が理解しているところでは、現在は「移動」機能がないので、コピーを作成して古いものを削除すれば十分です)。

答えて

1

FileまたはFolderクラスにGoogleドライブのあるフォルダから別のフォルダにファイルを移動する直接的な方法はありません。あなたは方法makeCopy()で別のフォルダにファイルをコピーしてsetTrashed()でそれを削除することができます述べたように、コードは次のようになります。

var targetFolder = DriveApp.getFolderById(TARGET_FOLDER_ID); 
    var newDoc = DocumentApp.create(requestID + " - " + requestSummary); // Creates the Document in the user's Drive root folder 

    // Modify the new document here, example: 
    // var body = newDoc.getBody(); 
    // body.appendParagraph("A paragraph."); 
    // newDoc.saveAndClose(); 

    var driveFile = DriveApp.getFileById(newDoc.getId()); // Gets the drive File 

    driveFile.makeCopy(newDoc.getName(), targetFolder); // Create a copy of the newDoc in the shared folder 
    driveFile.setTrashed(true); // sets the file in the trash of the user's Drive 

EDIT:

を考え直しと取ってRubenのコメントを考慮に入れる。私はAmitの答えを実装する方が良い習慣であることに同意します。

+0

Amitの[answer](http://stackoverflow.com/a/38810986/1595451)を参照してください。 –

+0

ありがとう@ルベーン(:私は両方の答えがユーザーのニーズに即していると思います@Amitは 'id'と'共有設定 'を変えることについて正しいです。これは、あるフォルダーから別のフォルダーにファイルを移動するときに重要です。彼らはすでにいくつかのユーザーに共有されています。この場合、@S Woodhouseはファイルを作成し、変更して移動したいと思っています。私は彼が "一時的な"ファイルの 'id'と'共有設定 'ファイル。 – ocordova

+0

個人的には、高度なドライブサービスを使って最終的な文書を作成し、それを 'Drive.Files.insert(file)'と一緒に直接ターゲットフォルダに挿入するという別の方法を使用します。決定する(: – ocordova

0

これを試してみてください:私たちは、ファイルのコピーを作成する場合は

var file = DriveApp.getFileById(newDoc.getId()); 
targetFolder.addFile(file); 
//DriveApp.getFolderById('root').removeFile(file); // remove from root 
8

と、元のゴミ箱、それはファイルのURLを変更しますし、また、ファイルの共有設定は保存されません。

Driveでは、DriveAppサービスの.addFolder()メソッドを使用してadd a file to multiple foldersにすることができます。ファイルをターゲットフォルダに追加し、直近の親フォルダからファイルを削除することができます。

function moveFiles(sourceFileId, targetFolderId) { 
    var file = DriveApp.getFileById(sourceFileId); 
    file.getParents().next().removeFile(file); 
    DriveApp.getFolderById(targetFolderId).addFile(file); 
} 
+4

私は最後の2行を取り消す必要があることを発見しました。そうすれば、removeFileは実際には私はコードを編集しようとしましたが、編集が「編集として意味をなさない」として却下されました。 – RedYeti

0

この質問は回答されているが、ここではわずかに異なる構成は次のとおりです。

function moveFile(parameterObject) { 
    var currentFolderID,file,fileToMoveID,sourceFolder,targetFolder,targetFolderID; 

    fileToMoveID = parameterObject.fileToMoveID; 
    currentFolderID = parameterObject.currentFolderID; 
    targetFolderID = parameterObject.targetFolderID; 

    file = DriveApp.getFileById(fileToMoveID);//Get the file to move 

    if (!file) { 
    functionToHandleThisKindOfThing("there is no file"); 
    return; 
    } 

    if (currentFolderID) {//The folder ID holding the current file was passed in 
    sourceFolder = DriveApp.getFolderById(currentFolderID); 
    } else {//No ID for the current folder 
    sourceFolder = file.getParents(); 
    if (sourceFolder) { 
     if (sourceFolder.hasNext()) { 
     sourceFolder = sourceFolder.next(); 
     } 
    } 
    } 

    targetFolder = DriveApp.getFolderById(targetFolderID); 

    targetFolder.addFile(file); 
    sourceFolder.removeFile(file); 
} 

function testCode() { 
    var o; 

    o = { 
    'fileToMoveID':"File ID of file to Move", 
    "targetFolderID":"ID of folder to Move to" 
    } 

    moveFile(o); 

} 
2

これが私の最初の投稿です!私はこれが数回答えられたことは知っていますが、実際に私のプロジェクトに取り組んでいる間、この質問に遭遇しました.Apple Scriptのドキュメントを見ながら、私はそれを行うための簡潔な方法を考え出しました。 some1の答えのバリエーション。

var file = DriveApp.getFileById(fileid); 
DriveApp.getFolderById(folderid).addFile(file); 
DriveApp.getRootFolder().removeFile(file); 

希望すると助かります!

関連する問題