2017-03-10 13 views
2

私はこれで新しいので、私と一緒に裸をしてください! 私はすべてのセルのデータを5文字に制限するこのコードを持っています。私は、あなたがより多くのその5を置けば、それは5つの文字に戻ってデータを短縮することを好む。google appsスクリプトが動作しない

function onEdit(e) { 
 
    var limit = 5; 
 
    if(e.value.length > limit) { 
 
    e.range.setValue(e.value.substring(0, limit)); 
 
    } 
 
}

私はそれがエラーを示してい[実行]ボタンをクリックした場合。

TypeError:プロパティ "value"を未定義から読み取ることができません。 (行3、ファイル "コード") しかし、それはうまくいくようです。

スクリプトをある範囲のセルでのみ使用したいと考えています。 C3:C100と言ってください。だから私はシートとセルを参照しなければならなかったので、スクリプトをこれに変更しました。

function onEdit(e) { 
 
var sheet = SpreadsheetApp.getActiveSheet(); 
 
var range = sheet.getRange("C3:C100"); 
 
var limit = 5; 
 
    if(e.value.length > limit) { 
 
    e.range.setValue(e.value.substring(0, limit)); 
 
} 
 
}

このスクリプトは、セルのいずれかで動作し、ましてや選択されたものはありません。 誰も私を助けることができますか?私は何を逃したのですか? ありがとう

答えて

1

onEditスクリプトは、スプレッドシート内の任意の編集によってトリガーされます。それはevent objectと呼ばれるもので編集を「キャプチャ」します。イベントオブジェクトは、引数として関数に渡すことができます。その場合、関数名としてonEdit(e)またはonEdit(event)が表示されます。そのオブジェクトには、e.range(編集範囲)、e.value(編集値)、e.source(編集が行われたスプレッドシート)などがあります。 スクリプトエディタの機能(再生ボタンをクリックして)スプレッドシートに実際の編集は行われません。したがって、イベントオブジェクトは作成されず、そのオブジェクトのすべてのパラメータは未定義になります。あなたは「制限」の範囲C3へのスクリプトの範囲にしたい場合は

は:C100は、次のようにスクリプトを変更することができます。現在、スクリプトは、すべてのタブ/シート上で動作します

function onEdit(e) { 
var limit = 5; 
if (e.value.length > limit && e.range.rowStart > 2 && e.range.rowStart < 101 && e.range.columnStart == 3) { 
    e.range.setValue(e.value.substring(0, limit)); 
} 
} 

注意をスプレッドシート/ワークブック内さらに1つのシート(「シート1」など)のみでスクリプトが動作するように制限する場合は、

function onEdit(e) { 
var limit = 5; 
if (e.source.getActiveSheet().getName() == 'Sheet1' && e.value.length > limit && e.range.rowStart > 2 && e.range.rowStart < 101 && e.range.columnStart == 3) { 
    e.range.setValue(e.value.substring(0, limit)); 
} 
} 
関連する問題