2016-02-12 43 views
0

我有一個帶有腳本的Google表格文件。該腳本做了很多事情,其中​​一個是使用makeCopy自行克隆它。這部分工作。現在我希望能夠保留相同的克隆Google文件名和相同的Google文件ID,並且只需更新包含電子表格和相關Google腳本的內容即可。我需要用附加的腳本覆蓋現有的Google表格文件

if (!fileFound){ 
    var file = masterSSFile.makeCopy(reportFileName, RepFolder); 
} else { 
    oldFile.setContent(masterSSFile.getBlob());   
} 

當我使用makeCopy使用相同的文件名,它會創建具有相同名稱但不同的文件ID的第二個文件。 else部分失敗,因爲.setContent參數似乎只接受文本。結果是oldFile中的「Blob」一詞,其他所有內容都消失了。

我有其他腳本通過覆蓋各種工作表的內容來更新現有電子表格的內容,但我也希望關聯的腳本也包含在更新後的文件中,並保留相同的文件ID。

+0

我知道可以使用代碼更新*** Stand Alone *** Apps腳本文件的內容。但我不認爲可以更新綁定到電子表格的現有Apps腳本文件。使用附加組件時,附件的文檔會自動獲取更新的代碼。 –

回答

0

我發現這個....

Overwrite an Image File with Google Apps Script

,並使用

var masterSpreadsheetID = SpreadsheetApp.getActiveSpreadsheet().getId(); 
var masterSpreadsheetFile = DriveApp.getFileById(masterSpreadsheetID); 
var oldFileID = oldFile.getId(); 
var oldFileName = oldFile.getName(); 
var newBlob = masterSpreadsheetFile.getBlob(); 
var file = { 
    title: oldFileName, 
    mimeType: 'application/vnd.google-apps.spreadsheet' 
    }; 
var f = Drive.Files.update(file, oldFileID, newBlob); 

試過,我得到錯誤:「很抱歉,服務器發生錯誤,請稍等一下,再試一次。「在這一行上:」Drive.Files.update(file,oldFileID,newBlob);「

看完這個: https://github.com/google/google-api-nodejs-client/issues/495

它看起來像Drive.Files.update(),不支持綁定腳本。

+0

你正試圖做的是不可能的。您實際上可以覆蓋電子表格內容,包括格式和公式,但不包括附加的腳本。保留腳本的唯一方法是複製文件(使用驅動器API),但是ID將會不同。 –

+0

謝謝,這是我現在理解的,再次感謝您花時間回覆。我想出了一種方法,讓每次使用.makeCopy更新文件時更改ID。 – Marty