我正在尝试根据存储在Google电子表格中的数据创建文档。我在绑定脚本(电子表格)中创建了一个函数,当触发时,应该获取适当的数据并将其放入新文档中。但是,当我尝试它时,我收到权限错误。
您可以从绑定到电子表格的脚本创建Google文档(在您的Google驱动器中)吗?如果是这样,怎么样?
以下是复制行为的一些步骤:
来自基本的Google表格:
<div class="diver-wrap">
<img src="http://www.upslike.net/imgdb/facebook-4846a5.png" alt=""/>
<a href="https://www.google.com" class="diver"></a>
</div>
我使用脚本编辑器创建了以下函数:
| A | B | C | D |
1| First Name | Last Name | Ready | Function |
2| John | Doe | | |
3| Jane | Doe | | |
D2有以下电话:
function createDocument(ready, row) {
if(ready) {
var data = Utilities.formatString("Hello %s %s", row[0][0], row[0][1]);
var doc = DocumentApp.create("Testing");
var body = doc.getBody();
body.appendParagraph(data);
return "Success"
}
}
但是当我在C2中输入“TRUE”(触发创建文档)时,我收到以下错误:
=createDocument(C2, A2:B2)
答案 0 :(得分:1)
您可以通过在脚本中使用触发器来解决此问题。
您可以使用onOpen(menu)或onEdit,它们各有优势。您也可以同时使用:)
onEdit:一行立即执行操作。 (一次一行)
onOpen:根据请求通过菜单对多行进行操作。
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu("Your Menu")
.addItem("Process names", "spreadsheetToDoc")
.addToUi();
}
function spreadsheetToDoc() {
var range = SpreadsheetApp.getActiveSheet().getDataRange();
var values = range.getValues();
var reg = /^true$/i;
for(var i = 0; i < values.length; i++) {
if(reg.test(values[i][2])) {
createDocument(values[i]);
range.getCell(i+1,4).setValue("Success");
range.getCell(i+1,3).setValue("");
}
}
}
function createDocument(row) {
var data = Utilities.formatString("Hello %s %s", row[0], row[1]);
var doc = DocumentApp.create("Testing");
var body = doc.getBody();
body.appendParagraph(data);
}
onEdit触发器检查活动行中列C的值是否已更改。
function onEdit() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getDataRange();
var values = range.getValues();
var reg = /^true$/i;
var i = sheet.getActiveCell().getRow() - 1;
if(reg.test(values[i][2])) {
createDocument(values[i]);
range.getCell(i+1,3).setValue("");
range.getCell(i+1,4).setValue("Success");
}
}
function createDocument(row) {
var data = Utilities.formatString("Hello %s %s", row[0], row[1]);
var doc = DocumentApp.create("Testing");
var body = doc.getBody();
body.appendParagraph(data);
}
您必须手动添加触发器(通过菜单转到项目触发器)。
祝你好运!答案 1 :(得分:0)
您创建的自定义函数只会向它们所在的单元格返回一个值,如果它们返回一个数组,则只返回相邻的单元格。
要执行脚本,您需要使用其他方法来触发它,例如自定义菜单或onEdit触发器。