2015-08-08 71 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); 
} 

您將不得不手動添加觸發器(通過菜單轉到項目觸發器)。

祝你好運!

相關問題