2013-02-08 128 views
1

在我的腳本中,我試圖創建一個文件夾,在所述文件夾中創建一個帶有日期標記的文檔,創建一個子文件夾,並將一些文檔複製到該子文件夾中。創建zip文件只包含pdf

這一切都很好。當我嘗試通過以下任一方法壓縮父文件夾時:Creating a zip file inside google drive with apps script - 它創建一個zip文件,其中帶有與日期標記文檔具有相同名稱的唯一PDF文件。壓縮的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 
+1

你可以發佈腳本嗎? – UpHelix 2013-02-08 16:02:34

回答

0

這是一個很好的問題。它似乎沒有壓縮功能有壓縮子文件夾的能力。您的腳本無法工作的原因是因爲您只從該文件夾中選擇文件

解決方法是壓縮每個子文件夾並將其存儲在一個壓縮文件中。你可以使用我爲此編寫的函數。

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)); 

我要在功能請求,以允許拉鍊子文件夾。

+0

它的工作原理!我甚至不必修改結構。非常感謝你的幫助。 – Greg 2013-02-19 22:15:17

+0

你可以在這裏找到解決方案:http://stackoverflow.com/a/28018270/3477084 – Hafez 2015-01-19 05:13:08

1

DocsList服務已被棄用,所以Phil Bozak以前的解決方案不再適用。但是,請參閱another SO question,以獲取適用於DriveApp類的解決方案。