覆盖文件。覆盖Apps Script文件。
这不是一个创建新的Apps Script文件的问题。那样对我没有帮助。我需要更新现有的Apps Script文件。这个问题类似于创建一个新文件,但并不是完全相同的问题。更新的语法和要求可能与创建新文件的不同之处足以使我无法从有关创建新文件的答案中得到解决方案。我已经查看了有关创建新文件的答案,但那并没有回答我的问题。
我尝试使用高级驱动服务(Advanced Drive Service)来将另一个Apps Script文件更新到现有的Apps Script文件中。
function updateMyScript() {
var targetFileID = 'File ID';
var dataSource = {
"files": [
{
"id":"739a57da-f77c-4e1a-96df-7d86ef227d62",
"name":"Code",
"type":"server_js",
"source":"function doGet() {\n return HtmlService.createHtmlOutputFromFile(\u0027index\u0027);\n}\n"
},
{
"id":"2c7e8b5a-dbc5-4cd2-80e9-77b6291b3167",
"name":"index",
"type":"html",
"source":"\u003chtml\u003e\n \u003cbody\u003e\n New message!!\n \u003c/body\u003e\n\u003c/html\u003e"
}
]
};
var filesResource = Drive.Files.get(targetFileID);
var blob = Utilities.newBlob(JSON.stringify(dataSource), "application/vnd.google-apps.script+json");
var whatRezult = Drive.Files.update(filesResource, targetFileID, blob, {"convert":"true"});
Logger.log('whatRezult: ' + whatRezult);
};
dataSource
对象中的id
属性是项目内每个特定的.gs
或html
文件的ID。我通过将“target”Apps Script文件下载为JSON,然后打开JSON文件并复制文件ID来获得这些ID。因此,我知道这些是正确的。我想要一种从代码中检索这些单独文件ID的方法。关于创建一个新的apps script文件的帖子,没有解释如何从项目文件获取“子”ID。项目文件ID与项目内每个文件的ID不同。 name
和type
属性很明显。而且,从示例中可以看出,只有两种类型的文件,类型分别为server_js
和“html”。对于Apps Script项目文件中的内部文件,它们的source
可以是字符串文字。因此,您可以键入您想要替换内容。
target ID
很容易理解。
如果可以使用高级驱动程序服务或UrlFetchApp.fetch()
完成此操作,那么这将回答我的问题。我只想使用Apps Script。因此,我不需要用其他语言编写的解决方案,也不需要在Apps Script之外运行的解决方案。
使用上述代码,我从倒数第二行收到错误消息:
Drive.Files.update(filesResource, targetFileID, blob, {"convert":"true"});
错误信息如下:
显然,它正在寻找某个地方指示范围设置。 我猜它会放在选项的第四个参数中。应用程序没有更新Apps Scripts所需的范围。
Drive.Files.Update()
路线设置所需的drive.scripts
范围是不可能的,因此多步骤的UrlFetchApp()
过程是提供的答案中唯一的方法。 - Bryan P