【发布时间】:2019-10-28 02:07:06
【问题描述】:
我正在尝试构建一个 Web 应用程序,该应用程序将从模板创建 Google Doc 并使用用户提供的数据填充它。使用文档中的 Google 快速入门示例,我可以成功授权和访问 Google Drive 文件系统。现在我需要以编程方式打开一个模板 Google Doc(甚至从头开始创建一个)并添加数据。
使用 App Script 的文档服务(DocumentAppclass)很容易做到这一点。所以我可以这样做:
function createDoc(contentArray) {
var doc = DocumentApp.create('Sample Document');
var body = doc.getBody();
var rowsData = contentArray; // data submitted with HTML form passed as arg
body.insertParagraph(0, doc.getName())
.setHeading(DocumentApp.ParagraphHeading.HEADING1);
table = body.appendTable(rowsData);
table.getRow(0).editAsText().setBold(true);
}
在独立的应用脚本中并在 Google Drive 上成功创建新的 Google Doc。我不知道如何从我的外部网络应用程序执行这个应用程序脚本。有没有办法做到这一点,还是我需要找到一种不同的方法来仅使用 Drive API 创建 Google Docs(并添加内容)?
编辑:
这是来自我的网络应用程序的 GET 请求:
var gurl = "https://script.google.com/macros/s/AKfycbwMHKzfZr1X06zP2iEB4E8Vh-U1vGahaLjXZA1tk49tBNf0xk4/exec";
$.get(
gurl,
{ name: "john", time: "2pm",},
function(data) {
console.log(data);
},
"jsonp"
)
这是我的doGet():
function doGet(e) {
var result = "";
var name = e.parameter.name;
Logger.log(name);
try {
result = "Hello " + name;
} catch (f) {
result = "Error: " + f.toString();
}
result = JSON.stringify({
"result": result
});
var doc = DocumentApp.create('ballz3');
var body = doc.getBody();
var rowsData = [['Plants', 'Animals'], ['Ficus', 'Goat'], ['Basil', 'Cat'], ['Moss', 'Frog']];
body.insertParagraph(0, doc.getName())
.setHeading(DocumentApp.ParagraphHeading.HEADING1);
table = body.appendTable(rowsData);
table.getRow(0).editAsText().setBold(true);
Logger.log('DOc Name: ' + doc.getName());
return ContentService
.createTextOutput(e.parameter.callback + "(" + result + ")")
.setMimeType(ContentService.MimeType.JAVASCRIPT);
}
【问题讨论】:
-
看看this guide - 为了能够执行您的 web 应用程序,您需要一个
doGet()或一个doPost()函数以及您的 Web 应用程序的版本化部署 -
@oleg valter 这正是我所需要的。我可以成功处理请求(使用
doGet()或doPost()并发回响应,但它似乎没有执行我的任何Document.app调用。可能是权限问题? -
您必须使用以下参数部署脚本 webapp:以我的身份执行,任何人甚至匿名都可以访问。这是因为当您的应用通过 URL 调用 doget 函数时,它实际上是匿名的。
-
如果您认为它会造成安全问题,您可以想象几个安全参数使其很难被破解。该文档展示了如何向 URL 添加参数以及如何在 doget 函数中处理它。我已经多次使用该配置来(例如)通过给每个人一个唯一的 url 来限制对我域中某些人的访问。
-
@Daveh0,抱歉现在才看到您的问题 - 我相信 Serge 已完整回答了您的问题,这确实是权限问题(启用匿名访问)。或者您可以按照 Alberto 的建议采用 API 可执行文件 路线(两者各有优缺点)
标签: google-apps-script google-drive-api google-docs