3

我想向我的網站添加一項功能,如下所示:遠程編輯Google文檔

單擊按鈕可以將文本追加到Google文檔中。

顯然我需要在驅動器中創建一個Apps腳本。 問題是如何從我的網站上觸發Apps腳本。您可以假設我是驅動器/文檔的所有者,因此有權以任何我喜歡的方式對其進行編輯。

我已經看過這些主題:

  1. Workarounds : How to edit native google documents programatcally?item
  2. How to programmatically manipulate native google doc files

看來他們是從驅動器本身執行的所有操作,而不是遠程觸發。

我也在Google中查找了Apps Script API,但還沒有找到辦法做到這一點。它甚至有可能嗎?

回答

4

是的,這是可能的。

首先編寫一個應用程序腳本來更改所需的文檔。然後將其部署爲任何人均可訪問的Web應用程序running as you,即使是匿名的。在Apps腳本頁查看the guides,瞭解如何將腳本編寫爲Web應用程序。

然後您的腳本將擁有一個公共網址,您可以從您的網站打電話並讓它正常運行「遠程」。

+0

它的工作原理,但我得到'xmlhttprequest無法加載'access-control-allow-origin'錯誤。你知道腳本應該返回給客戶嗎? – sangil 2014-11-03 15:00:38

+0

你不應該有這個問題。你能分享一個問題的例子(訪問一個Apps腳本公共網址)嗎? – 2014-11-03 16:16:35

+0

沒關係,我的壞。我從本地運行客戶端而不是實際的IP地址 – sangil 2014-11-03 16:25:30

4

提供什麼建議恩裏克,這裏的例子是small webapp,增加了文本到publicly viewable document我自己的(它並不需要是除了這裏任何人都可以查看它的工作原理大衆!)

我寫的它使用了UiApp但你當然可以使用HTMLService如果你喜歡...

enter image description here

該應用程序運行作爲我,但任何人甚至是匿名訪問。

// publicly viewable test doc url : https://docs.google.com/document/d/1THzBTURxGr2CdUmcZ7i2zD-RM8I3im2JCSHI3BHlkeM/edit 

function doGet(){ 
    var app = UiApp.createApplication().setTitle('docEdit'); 
    var panel = app.createAbsolutePanel().setSize('100%','100%').setStyleAttributes({'padding':'40px','backgroundColor':'lightBlue'}); 
    var text = app.createTextArea().setName('text').setPixelSize(500,300); 
    var grid = app.createFlexTable().setId('grid'); 
    grid.setText(0,0,'Add your text').setWidget(1,0,text); 
    var handler = app.createServerHandler('writeText').addCallbackElement(panel); 
    grid.setWidget(2,0,app.createButton('update document',handler).setId('btn')); 
    app.add(panel.add(grid)); 
    return app; 
} 

function writeText(e){ 
    var doc = DocumentApp.openById('1THzBTURxGr2CdUmcZ7i2zD-RM8I3im2JCSHI3BHlkeM'); 
    var now = Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'MMM/dd/yyyy @ hh:mm:ss'); 
    var body = doc.getBody(); 
    body.appendParagraph('Append text on '+now+' : '+e.parameter.text); 
    doc.saveAndClose(); 
    var app = UiApp.getActiveApplication(); 
    var grid = app.getElementById('grid'); 
    grid.setWidget(3,0,app.createHTML('Thanks,<br>Your text has been added to the document')); 
    app.getElementById('btn').setEnabled(false).setHTML('Button disabled'); 
    return app; 
} 
+0

我認爲[ContentService](https://developers.google.com/apps-script/guides/content)更適合他的情況,因爲他會從常規他的網站上的JavaScript。 – 2014-11-01 22:56:13

+0

我同意他是否需要從文檔中返回數據,但據我瞭解請求 - 他只需要寫入文檔,以便documentApp服務是唯一參與的文檔。 Web應用程序及其用戶界面只是爲了說明一個工作示例。 – 2014-11-02 09:15:28