1

私のスクリプトでは、フォルダーを作成し、そのフォルダーに日付スタンプ付きのドキュメントを作成し、サブフォルダーを作成して、いくつかのドキュメントをそのサブフォルダーにコピーしようとしています。

これはすべてうまく機能します。ここにある方法のいずれかを使用して親フォルダーを圧縮しようとすると、appsスクリプトを使用してGoogleドライブ内にzipファイルを作成します-日付スタンプ付きドキュメントと同じ名前の唯一のPDFファイルでzipファイルを作成します。zip形式のPDFは空白であり、サブフォルダーはありません。

なぜこれが起こっているのかについての洞察は素晴らしいでしょう。

var folder = DocsList.createFolder(folderTitle);
var subFolder = folder.createFolder('Attachments');
    subfolder.createFile(attachments[]); //In a loop that creates a file from every
                                         //attachment from messages in thread

var doc = DocumentApp.create(docTitle); //Google Doc
var docLocation = DocsList.getFileById(doc.getId());
    docLocation.addToFolder(folder);
    docLocation.removeFromFolder(DocsList.getRootFolder());
//Everything works fine, I can view file and subfolder, and subfolder's documents

//This is where the problem is:
var zippedFolder = DocsList.getFolder(folder.getName());
    zippedFolder.createFile(Utilities.zip(zippedFolder.getFiles(), 'newFiles.zip'));
//this results in a zipped folder containing one blank pdf that has the same title as doc
4

2 に答える 2

1

DocsListサービスは廃止されたため、PhilBozakの以前のソリューションは機能しなくなりました。ただし、DriveAppクラスで機能するソリューションについては、別のSOの質問を参照してください。

于 2014-12-27T19:52:28.487 に答える
0

これは素晴らしい質問です。zip機能にはサブフォルダを圧縮する機能がないようです。スクリプトが機能しない理由は、フォルダからファイルを選択するだけだからです。

解決策は、各サブフォルダーをzipして、1つのzipファイルに保存することです。このために私が書いた関数を使うことができます。

function zipFolder(folder) {
  var zipped_folders = [];
  var folders = folder.getFolders();
  for(var i in folders)
    zipped_folders.push(zipFolder(folders[i]));
  return Utilities.zip(folder.getFiles().concat(zipped_folders),folder.getName()+".zip");
}

これにより、すべてのサブフォルダーが再帰的に圧縮されます。次に、次のようなファイルを作成する必要があります

DocsList.getFolder("path/to/folder/to/store/zip/file").createFile(zipFolder(folderToZip));

サブフォルダーを圧縮できるようにする機能リクエストを送信します。

于 2013-02-17T04:55:39.517 に答える