2017-05-05 7 views
0

이 질문에 대한 답변을 찾았지만 초보자 용 스크립팅을 할 때 매우 초록색이어서 발견 한 내용을 이해할 수 없었습니다.활성 시트에서 onedit 실행

나는 우리가 작업 목록에 사용하는 스프레드 시트를 가지고 - 그것은 세 개의 탭으로 구분됩니다 : 샘플/이미지/아카이브

사용자가 작업 항목을 수집하는 스프레드 시트에 액세스 -이 완료되면 그들은으로 열 A를 표시 "완료", 그리고 나는 그들이 그렇게하면 자동으로 "아카이브"시트에 행을 이동하는 것은 매우 유용하게 ScampMichael에서 제공하는 코드를 가지고 :

function onEdit(event) { 
// assumes source data in sheet named Samples 
// target sheet of move to named Archive 
// test column with Completed is col 1 or A 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var s = event.source.getActiveSheet(); 
var r = event.source.getActiveRange(); 

if(s.getName() == "Samples" && r.getColumn() == 1 && r.getValue() == "Complete") { 
var row = r.getRow(); 
var numColumns = s.getLastColumn(); 
var targetSheet = ss.getSheetByName("Archive"); 
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
s.getRange(row, 1, 1, numColumns).moveTo(target); 
s.deleteRow(row); 
} 
} 

나의 도전은이 코드가 동시에 작동시킬 수 없다는 것입니다 "Samples"및 "Images"탭을 모두 누릅니다. 스프레드 시트 당 하나 이상의 onEdit 기능을 사용할 수 없기 때문에 이것이 가능하다는 것을 알았지 만 지금까지 두 탭을 모두 보도록 코드를 확장하려는 노력은 실패했습니다.

제공 할 수있는 도움이 매우 만족 스럽습니다!

+0

이미지 시트를 처리하고 onEdit 함수에서이를 호출하는 다른 함수를 만들 수 있습니다. 이미지 시트를 사용하여 수행해야 할 작업이 명확하지 않습니다. –

+0

혼란을 드려 죄송합니다. 이미지 시트와 똑같은 작업을 수행해야합니다. 같은 스크립트와 별도의 파일에서이 코드를 복제하려고했지만 두 시트 모두에서 작동하는 함수를 가져올 수 없습니다. – seerauber

답변

0

당신이하고 싶은 일이 아직도 명확하지는 않지만, 나는 그것에 총을 맞았습니다. 이미지가 샘플의 완성 된 행과 같은 행 번호에 있다고 가정하고 이미지를 아카이브에 복사 할 때 아카이브에 작성된 행의 끝에 추가합니다. 나는 당신의 코드를 약간 수정했다. 그들은 주목 받는다. 필요한 경우 테스트 스프레드 시트를 공유 할 수 있습니다.

function onEdit(event) { 
// assumes source data in sheet named Samples 
// target sheet of move to named Archive 
// test column with Completed is col 1 or A 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var s = event.source.getActiveSheet(); 
var r = event.source.getActiveRange(); 
if(s.getName() == "Samples" && r.getColumn() == 1 && r.getValue() == 
"Complete") { 
var row = r.getRow(); 
var numColumns = s.getLastColumn(); 
var targetSheet = ss.getSheetByName("Archive"); 
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
s.getRange(row, 1, 1, numColumns).moveTo(target); 
s.deleteRow(row);//changed to delete the row 
image(row,numColumns)//call function to process Images send row and last column 
}} 
function image(row,numColumns){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var s1=ss.getSheetByName("Images")//get Images sheet 
    var lc=s1.getLastColumn() 
    var data=s1.getRange(row, 1, 1,lc)//get row 
    var targetSheet = ss.getSheetByName("Archive"); 
    var target = targetSheet.getRange(targetSheet.getLastRow() , numColumns+1,1,1);//add image one column after Samples data on same row. 
    s1.getRange(row, 1, 1, lc).moveTo(target); 
    s1.deleteRow(row)//delete the copied image row. 
}