2016-09-14 5 views
0

AppSheetで作成されたモバイルアプリによって更新されたGoogleシートがあります。 私は履歴を保持するために必要なデータの列を持っているので、別のシートのfblank列に列をコピーするためのスクリプトを書きました。Google Scripts onEditは、モバイルデバイスからの同期中にシート上で編集中のデータを認識しません。

function readdailyChecks() { 
    var sheetFrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Todays Checks"); 
    var sheetTo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("History"); 
    // Copy from 5th column, all rows for one column 
    var valuesToCopy = sheetFrom.getRange("D2:D100").getValues() 
    //Paste to another sheet from first cell onwards 
    sheetTo.getRange(1,sheetTo.getLastColumn()+1,valuesToCopy.length,1).setValues(valuesToCopy); 
} 

シートが同期は、シートのデータを編集するだろうと考え編集されたとき、私は、このタスクを実行するために別のスクリプトを書きました。

function onEdit(e) { 
    if(e); 
    readdailyChecks(e) 
} 

アプリは、フォームが完了した後に、同期シートを更新し、それがものだ行うにonEditコードをトリガーするということでアイデア。 問題は、過去のデータが作成されないように、同期がシートデータを編集せずに変更することです。

onSyncコードがありますか、またはデータが変更されたときにスクリプトが起動される方法はありますか?

+0

おそらく、[onChange](https://developers.google.com/apps-script/reference/script/spreadsheet-trigger-builder#onChange())トリガーは、あなたが探しているものです –

+0

@RobinGertenbach:から[documentation](https://developers.google.com/apps-script/guides/triggers/installable)「インストール可能な変更トリガー**は、ユーザーがスプレッドシートの構造を変更すると**実行されます。新しいシートを追加したり、列を削除することができます。 –

答えて

0

使用可能なトリガーについては、official documentationに記載されています。編集、開く、変更、フォーム送信は、ユーザーが操作を行うとトリガーされます。

代わりに、アプリでGoogle Apps Script関数を呼び出すこともできます。これを行う1つの方法は、使用することです。google.script.run (Client-side API)

0

私はAppSheetで働いています。 GoogleシートのバックエンドAPIを使用してGoogleシートを更新すると、onEditトリガーは発生しません。なぜこれが正確かはわかりませんが、それはGoogleによって課せられた制限です。それはあなたが観察していることです。

AppSheetのドキュメントでは、変更をポーリングする代わりに時間指定されたトリガーを試すことを提案しています。 https://appsheethelp.zendesk.com/hc/en-us/articles/206483017-Google-Drive

最大ではありませんが、機能します。一部のAppSheetユーザーは、onEditトリガーの代わりにonChangeトリガーを使用して成功を報告しています。私にとっては、これはonChangeトリガーでの文書化された意味に基づいてロジックに反しますが、これらのユーザーにとっては効果があるように見えます。