2016-07-06 9 views
1

私は現在、すなわち、すべてのセルの値をつかむデーモンスレッドを実行して変更があるかどう算出し、ループ内で依存性細胞を書き出し:Gspread - リスナーを変更しますか?

def f(): 
    while not event.is_set(): 
     update() 
     event.wait(15) 
Thread(target=f).start() 

これは動作しますが、ループのget-すべての呼び出しがあります重要なI/O

Googleスプレッドシートでスレッドに変更が通知された場合は、これを行うよりもはるかにクリーンになります。これを行う方法はありますか?

答えて

0

Googleスプレッドシートで変更が検出されたときにHTTPリクエストをトリガーすることで、これを実行できました。

function onEdit (e) { 
    UrlFetchApp.fetch("http://myaddress.com"); 
} 

のPython側(トルネード/ w)の

import tornado.ioloop 
import tornado.web 

class MainHandler(tornado.web.RequestHandler): 
    def get(self): 
     on_edit() 
     self.write('Updating.') 

def on_edit(): 
    # Code here 
    pass 

app = tornado.web.Application([(r'/', MainHandler)]) 
app.listen(#port here) 
tornado.ioloop.IOLoop.current().start() 

私はこの種の機能がgspreadの範囲内でなければならないとは思わないが、私は願っています:Googleのシートに

ドキュメンテーションは他人を助ける。

1

私はgspread GitHubのの問題にmy commentを言い換え:

をGoogleシートからの変更通知を取得Appsスクリプトでinstallable triggersの助けを借りて可能です。 スクリプトエディタでカスタム関数を設定し、この関数にトリガイベントを割り当てます。この関数では、UrlFetchApp.fetchで外部URLを取得できます。

リスニング側(Webサーバー)には、このURLのハンドラがあります。このハンドラはジョブを実行します。サーバーの構成(多くのスレッドまたはプロセス)によっては、競合状態が発生しないようにしてください。

また、ブラウザーでトリガーされない更新もテストしていません。 Sheetsがこのタイプの更新のために同じイベントをトリガする場合、無限ループの場合があります。

関連する問題