2015-08-08 70 views
0

我试图从存储在Google Spreadsheet中的数据创建文档。我在绑定脚本(对电子表格)中创建了一个函数,在触发时,应该将适当的数据放入一个新文档中。但是,当我尝试时出现权限错误。通过绑定到Google电子表格的脚本创建Google文档

您可以从脚本绑定到电子表格创建一个谷歌文档(在您的谷歌驱动器)?如果是这样,怎么样?

这里有一些步骤重复行为:

从一个基本的谷歌片:

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" 
    } 
} 

D2有:

|  A  |  B  | C | D  | 
1| First Name | Last Name | Ready | Function | 
2| John  | Doe  |  |   | 
3| Jane  | Doe  |  |   | 

我使用脚本编辑器创建下面的函数以下电话:

=createDocument(C2, A2:B2) 

但是,当我输入“TRUE”到C2(触发文档的创建)我得到以下错误:

Error you do not have permission to call create (line 4). 

回答

0

自定义功能,如你已经创建只会返回一个值到细胞中如果它们返回一个数组,它们就驻留在相邻的单元格中,仅此而已。

要执行脚本,您需要使用其他方法来触发它,例如自定义菜单或onEdit触发器。

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); 
} 

您将不得不手动添加触发器(通过菜单转到项目触发器)。

祝你好运!

相关问题