2017-09-15 2 views
1

私は非常にひどくコーディングしていますが、Googleシート内のプレースメントのスタティックユニークIDを生成するスクリプトをまとめようとしています。Googleシートスクリプト:行番号にリンクされていない静的な一意のIDを生成する

列Dの任意のデータが列Aに入力されると、最後のIDから増分する一意のIDが生成されます。ただし、一意のIDは静的なものでなければならず、行番号にリンクされていません。ユニークなIDの必要性は、データが列Dに入力される順序でインクリメントする必要があります。列Dには必ずしも順番に入力する必要はありません(ID2は行16に、ID3は行6にあります)。

私は、実行する必要のあるものをほぼ達成していると感じていますが、最終決定には私の理解の限界に達しています。誰でもOnForm関数からsetValueコマンドを含めるためにOnEdit関数をどのように適応させるか説明するのに役立つことができますか?私が正しくあなたの問題を理解している場合

function OnForm(){ 
 
var sh = SpreadsheetApp.getActiveSheet() 
 
var startcell = sh.getRange('A1').getValue(); 
 
if(! startcell){sh.getRange('A1').setValue(1);return}; 
 
var colValues = sh.getRange('A1:A').getValues(); 
 
var max=0;// define the max variable to a minimal value 
 
    for(var r in colValues){ // iterate the array 
 
    var vv=colValues[r][0].toString().replace(/[^0-9]/g,''); 
 
    if(Number(vv)>max){max=vv}; 
 
    } 
 
    max++ ; // increment to be 1 above max value 
 
sh.getRange(sh.getLastRow()+1, 1).setValue(Utilities.formatString('IG%05d',max)); 
 
} 
 

 

 
function onEdit(e) { 
 
var ss = e.source.getActiveSheet(); 
 
var watchedCols = [4] 
 
if (watchedCols.indexOf(e.range.columnStart) === -1) return; 
 
ss.getRange(e.range.rowStart, 2) 
 
    .setValue('unique ID here') 
 
}

答えて

1

、あなたがすべきID列の値をループし、最大値を検索します。列をループして最大値を変数に格納した後、その値を1だけ増分して新しいIDとして設定します。

ですから、セルの値を設定する前にこのループを実行します。

var drang = ss.getDataRange(); 
var ids = ss.getRange(1, 2, drang.getLastRow(), 1).getValues(); 
var biggest = 0; 

for(var i = 0; i < ids.length; i++){ 
    var id = ids[i][0]; 
    if(id > biggest){ 
    biggest = id; 
    } 
} 

をそして、あなたは値を設定する場合:

ss.getRange(e.range.rowStart, 2) 
.setValue(biggest+1) 
+0

私に権利について鳴ります。あなたは私にそれをどうやってしてくれるのかを教えてもらうことはできません。 – user1883984

+0

確かに、私は答えを編集しました。私はGoogleスクリプトとあまりにも優れていないとスプレッドシートAPIを使用していないことに注意してください。このコードが機能していないかどうか教えてください。私はそれに戻ります。 – VOL

関連する問題