2013-07-02 48 views
1

我有以下腳本,當運行結束時,我想將該電子表格的副本製作成名稱+日期的特定文件夾,例如:我該如何使用Google Script在Google Drive中將電子表格複製到特定文件夾中

我有一個名爲「Audit」的電子表格,當一些特定的腳本運行到最後時,我想爲電子表格創建一個拷貝到根文件夾/ Audit/Historic到谷歌驅動程序或谷歌文檔中。

注意:根目錄是谷歌驅動程序或谷歌文檔頂部文件夾。

腳本:

function ShellCopyValues(){ 
     var sheets = ['sheet1','sheet2','sheet3','sheet4','sheet4']; 
     for (var s in sheets){ 
     CopyRows(sheets[s]); 
     } 
    } 

    function CopyRows(uname) { 
    var source = SpreadsheetApp.openById('XXXXXX'); 
    var sourcesheet = source.getSheetByName(uname); 

    var target = SpreadsheetApp.openById('YYYYYY'); 
    var targetsheet = target.getSheetByName(uname); 
    var targetrange = targetsheet.getRange(2, 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn()); 
    var rangeValues = sourcesheet.getRange(2, 1, sourcesheet.getLastRow(), sourcesheet.getLastColumn()).getValues(); 
    targetrange.setValues(rangeValues); 

    } 

在這個劇本我想打一個副本的結束。

我會很感激,如果有人有任何想法我怎麼能做到這一點。

編輯:2013年8月7日(固定)

  • 腳本將與此格式(文件名+日期)
  • 該腳本將文件保存到一個文件夾的副本。 (不會出現在根 「我的司機」)

    //This part make a copy of the spreadsheet 
    var SSID = 'XXXXXX' 
    var CopyDate = Utilities.formatDate(new Date(), "GMT-3", "ddMMyyyyHHmm"); // Function Date + Format 
    var folder = DocsList.getFolder('Historic'); //Use this line if you want to get the folder by name 
    //--> var folder = DocsList.getFileById('YYYYY'); //Use this line if you want to get the folder by ID 
    var backup = DocsList.getFileById(SSID).makeCopy(SpreadsheetApp.openById(SSID).getName() + "_" + CopyDate); 
    backup.addToFolder(folder); //This line will be move the folder 
    backup.removeFromFolder(DocsList.getRootFolder()); //This line is needed to remove the Filde from the Root 
    
+0

事實上,打開電子表格應只發生在該方法ShellCopyValues(一次),並通過所選擇的片材(「Sheet 1中」,「Sheet 2中」,「表Sheet 3」 ...)作爲CopyRows(源表格,目標表格)方法的參數。 – wchiquito

回答

0

特別用於addToFolder(parent)removeFromFolder(parent)getParents()

嘗試:

... 
    var folder = DocsList.getFolder('Historic'); 
    var backup = DocsList.getFileById(SSID).makeCopy(SpreadsheetApp.openById(SSID).getName() + "_" + CopyDate); 
    var deleteFromFolder = backup.getParents()[0]; 
    backup.addToFolder(folder); 
    backup.removeFromFolder(deleteFromFolder); 
    ... 
+0

嗨,你有任何示例腳本來做到這一點? –

+0

William the ShellCopyValues()+ CopyRows一次打開工作表,但腳本Copyrows爲每個工作表運行,這樣腳本創建同一工作表的4個副本.. 1一旦Sheet1更新,其他工作表2更新,其他表3和表4 –

+0

我明白,該程序應該打開這兩個電子表格,遍歷工作表複製和創建備份。 在您的代碼中爲每個迭代複製工作表,打開這兩個電子表格並生成備份,您可能需要稍微更改一部分。 – wchiquito

1

使用DriveApp ...使用getFileById(id)然後用makeCopy(name)

然後

使用DocsList獲取文件...得到該文件使用getFileById(id)然後使用addToFolder(folder)

我不認爲有一個在DocsListDriveAppDriveApp 0和文件對象是不一樣的

+0

請你能看到我的編輯?謝謝...另外我不知道如何告訴腳本我想保存該副本的位置(文件夾)。該腳本是在根中創建副本,但我想保存在特定路徑 –

+0

現在只有一個問題...當腳本運行創建4個副本時,我想只在創建副本時更新所有工作表 –

+0

我修復了問題,請再次參閱編輯。我將代碼移動到腳本的末尾SheelCopyValue() –

相關問題