2017-04-18 18 views
0

私は毎月作成されるGoogleシートを持っているので、現在の月のシートを特定のフォルダにコピーし、新しいスプレッドシートのセルに古い。それはうまくいく。スプレッドシートGoogleスクリプトの手動コピーを防止する

「コピーを作成する」メニュー項目を使用してスプレッドシートを手動でコピーして、提供されたカスタムメニュー項目を代わりに使用しようとすると、ユーザーに警告するソリューションを考え出しています。

私はセルにフラグを設定することを考えましたが、手動コピーでもフラグがコピーされるため、初めて動作します。ファイルを手動でコピーしたときに検出できたら、フラグをリセットしてからonOpenをテストすることができます。

誰かが正しい方向に向けることができますか?残念ながら、ユーザーはドキュメントを編集できる必要があるので、ファイルメニューのオプションを無効にすることはできません。

感謝

答えて

2

あなたは、この特定の問題に対処することができます:私はセルにフラグを設定することを考えたが、もちろんのこと、初めてだけ 作品、また手動コピーとして

をフラグをコピーします。

PropertiesServiceを使用すると、ドキュメントプロパティを使用して特定のドキュメントにプロパティを追加できます。このプロパティは、その特定のドキュメントの任意のユーザーが実行するスクリプトによってアクセスできます。

ただし、ドキュメントをコピーすると、プロパティはコピーされません。 onOpen中にこのプロパティを検索して、ドキュメントが必要な方法でコピーされたかどうかを判断できます。

あなたはこのような何か行うことができます。

function setProp(){    //use this to set the property to the document 
var docProp = PropertiesService.getDocumentProperties(); 
    docProp.setProperty("Copied", "false")    //Properties are stored as text immaterially of the type of value you pass to it! 
} 

function getProp(){    //use this to check if the property of the document was set, if set will return true, else false 
    var docProp = PropertiesService.getDocumentProperties(); 
    Logger.log(docProp.getProperty("Copied")) 
    return docProp.getProperty("Copied") == "false" 

} 

function onOpen(e){      
var ui = SpreadsheetApp.getUi() 
if(getProp()){      // Check to see if the property was set for the sheet. 
    ui.alert("Copied correctly") 
} else {        // This will trigger each time they open the sheet, 
    ui.alert("Copied Incorrectly, please use custom function to make a copy") 
} 
} 

希望に役立ちます!

+0

ドキュメントIDが「正当な」コピーに保存されているものと同じように実装されましたが、この回答では何かが十分であると言います。 Googleがコピーを変更して将来的にドキュメントのプロパティを含めるようにした場合、ドキュメントごとの固有の解決策などが必要になります。 – Jonathon

関連する問題