2
私はいくつかのコードがうまく動作していますが、遅くてぎこちないものです。Googleスクリプトのデータの取得/照合
私は、ユーザーが編集したもの( 'MAIN')と、スクリプトがデータを5000行以上(「REF」)から取り出すものの2枚を持っています。 。基本的には1列に一致するチェックし、ユーザが入力したものと一致する場合、それはむしろゆっくりと同じ行が、3.
コードが動作するカラムの値をつかむが、:
function onEdit(){
var s = SpreadsheetApp.getActive().getSheetByName('MAIN');
var sref = SpreadsheetApp.getActive().getSheetByName('REF');
var activeRow = s.getActiveCell().getRow();
var activeCol = s.getActiveCell().getColumn();
var activeCell = s.getActiveCell().getValue();
var mainPageBranch = s.getRange(8,1).getValue();
var refPageBranch = sref.getRange('I4').getValue();
var lastrow = sref.getLastRow();
if(activeCol == '2' || activeCol == '5' || activeCol == '8' || activeCol == '11' || activeCol == '14' || activeCol == '17' || activeCol == '20'){
if(activeRow > 9 && activeRow < 41){
if(activeCell > 100000){
s.getRange(activeRow, activeCol+1).setValue(1);
}
else{
s.getRange(activeRow, activeCol+1).setValue('');
}
for(var i=5; i <lastrow; i++){
var productCode = sref.getRange(i, 1).getValue();
if(activeCell == productCode){
var essMould = sref.getRange(i,3).getValue();
s.getRange(activeRow+1,activeCol).setValue(essMould);
s.getRange(activeRow+1,activeCol+1).setValue('1');
break;
}
}
Logger.log('Product Code: ' + productCode);
Logger.log('Ess Mould: ' + essMould);
Logger.log('Last Row: ' + lastrow);
}
}
}
私はそれが一種のものだと理解しています - それを速くする助けがあれば素晴らしいでしょう!
は、あなたが何かを必要とするなら、私を知ってみましょう:)
編集:ここに更新されたコードのおかげです!
function onEdit(){
var s = SpreadsheetApp.getActive().getSheetByName('MAIN');
var sref = SpreadsheetApp.getActive().getSheetByName('REF');
var activeRow = s.getActiveCell().getRow();
var activeCol = s.getActiveCell().getColumn();
var activeCell = s.getActiveCell().getValue();
var mainPageBranch = s.getRange(8,1).getValue();
var refPageBranch = sref.getRange('I4').getValue();
var lastrow = sref.getLastRow();
var productCode,essMould,data,L;
data = sref.getRange(5, 1, lastrow-5,3).getValues();
L = data.length; //Length of data
if(activeCol == '2' || activeCol == '5' || activeCol == '8' || activeCol == '11' || activeCol == '14' || activeCol == '17' || activeCol == '20'){
if(activeRow > 9 && activeRow < 41){
if(activeCell > 100000){
s.getRange(activeRow, activeCol+1).setValue(1);
}
else{
s.getRange(activeRow, activeCol+1).setValue('');
}
for(var i=5; i <L; i++){
productCode = data[i][0];
if(activeCell == productCode){
essMould = data[i][2];
s.getRange(activeRow+1,activeCol).setValue(essMould);
s.getRange(activeRow+1,activeCol+1).setValue('1');
break;
}
}
Logger.log('Product Code: ' + productCode);
Logger.log('Ess Mould: ' + essMould);
}
}
}
もっと洗練されたアイデアは、これが私が探していたものですが、私はそれを自分で作ることができませんでした。私はあなたのコードを少し修正してアプリケーションを改善しました - あなたは私の記事でそれが編集されているのを見ることができます:) Thanks heaps! – Khaoz