2017-07-17 4 views
2

私は人々がコピー/貼り付け値を持つシートを持っています。これにより、値を拒否するのではなく、単に「警告」するだけでデータの検証が回避されます。getDataRange()と等価で、datavalidationsを持つ範囲を取得しますか?

データのバリデーションを持つシート内のすべての範囲を検索したいとします。リファレンスガイドで何かを見つけようとしましたが、これを実行する唯一の方法は、すべてのセルをループしてそのデータ検証をチェックすることです。

誰かがこれを確認するより効率的な方法を持っているとよいでしょう。

+0

データ検証ルールで「拒否」オプションを設定できることは知っていますか?https://i.stack.imgur.com/hYkTj.png? – Kos

+0

はい、無効なデータを拒否するように設定している間は、シートに貼り付けてください。あなたはそのような場合に値を拒否しないが、警告を出すことがわかります。 – Casper

+0

私はそれがシートのバグのように見えます。チェックセルに 'onEdit'トリガを追加して、データバリデーションルールを設定し、スクリプトによって貼り付けられた値を '拒否'することができます。 – Kos

答えて

1

あなたはループが必要ですが、ない(セルあたりのAPI呼び出しgetDataValidationを取る)細胞上ではなくgetDataValidationsによって返さダブル配列上:

var sheet = SpreadsheetApp.getSheetByName("Sheet1"); 
var range = sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()); 
var rules = range.getDataValidations(); 
for (var i = 0; i < rules.length; i++) { 
    for (var j = 0; j < rules[0].length; j++) { 
    if (rules[i][j]) { 
     // do something with the cell 
    } 
    } 
} 

などのより直接的な方法はありませんgetNamedRangesまたはgetProtections

考えられる回避策:検証する範囲に名前を付けて、getNamedRangesで取得することができます。

関連する問題