2
나는 약간의 속도가 느리고 clunky 한 코드를 가지고있다. 이 작업을 수행하는 더 좋은 방법이 있는지 확인하십시오 :구글 스크립트에서 데이터 '가져 오기/일치'수정
사용자가 편집하는 시트 ('MAIN')와 스크립트가 데이터를 가져 오는 시트 (5000 라인 이상) ('REF')가 있습니다. . 기본적으로는 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);
}
}
}
나는 그것이 clunky의 종류라고 이해한다 - 그것을 빠르게하는 어떤 도움은 위대 할 것이다!
다른 작업 :
편집이 필요하면 알려주세요 : 여기에 업데이트 된 코드 덕분입니다!
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);
}
}
}
훨씬 더 세련된 생각인데, 이것은 내가 찾고 있었던 것이지만, 나 자신을 할 수 없다. 하하! 약간 내 응용 프로그램에 맞게 코드를 편집했습니다 - 당신이 그것을 내 게시물에서 편집 볼 수 있습니다 :) 감사합니다 힙! – Khaoz