-2

여기 내 첫 번째 질문입니다. 나는 나의 지식의 최고에 사이트를 찾았지만 나의 질문의 다른 예제를 발견하지 못했다.Google Script : 각 선생님을위한 학교 일정 데이터 인쇄

다음은 Google 스프레드 시트에서 나는 동일한 Google 시트 문서의 2 장을 https://docs.google.com/spreadsheets/d/1HxyhoxuPK8H8_vhLg0ZZ-THyOn1cn9nPYRyls8y47iM/edit?usp=sharing

파일입니다. 첫 번째 "스키마"에는 교사를위한 기본 스쿨 일정이 포함되어 있으며 각 블록마다 다른 클래스가 있습니다. 모든 교사는이 정확한 설정을 갖도록 복제해야합니다. 즉, 모든 고유 사용자는 할당 된 클래스를 사용하여 동일한 50 행의 일정 데이터를 갖습니다.

두 번째 시트에는 사용자에 대한 정보가 들어 있습니다. 각 행은 UNI 로그인 사용자 이름과 사용자 uni12345에 대해 지정된 클래스 1a-1, 4a-1 및 8a-1을 포함합니다. 1a-1은 "uni12345"의 스케줄 데이터에서 1을 대체해야합니다.

저는이 모든 데이터 (많은 라인)를 하나의 시트 fx에 결합하고 싶습니다.

나는 목록에서 user1 + 2에 대한 결과를 어떻게 보여줄 것인지 제시 한 Combined Example 시트를 만들었습니다.

질문에 이미 부분적으로 부분적으로 응답하는 경우, 나는 또한 그걸 보게 될 것입니다!

편집 : 내 원래의 질문 이후로 나는 지금 그것을 만들었습니다 - 지금은 6 분짜리 스크립트 실행 시간 제한을 치고 있습니다. 주위에 어떤 방식 으로든, 예를 들면. 최적화? 이 코드는 하나 각 행을 추진하는 것을 피한다 새로운 배열을 작성합니다 :

function merge() { 

    var CurrentDate  = new Date() ; 
    var CurrentDateString1 = Utilities.formatDate(CurrentDate, "GMT", "MM-dd-yyyy HH:mm:ss") ; 

    var ss=SpreadsheetApp.getActive(); 
// var mergeSht=ss.getSheetByName(CurrentDateString1);      
    var users=ss.getSheetByName('users'); 
    var schema=ss.getSheetByName('schema'); 

    var mergeSht = ss.insertSheet(); 
    mergeSht.setName(CurrentDateString1); 

    var usersValues = users.getDataRange().getValues(); 
    var schemaValues = schema.getDataRange().getValues(); 

    var counter = 1; 


    for(var n=1; n < usersValues.length ; n++){ 

    var usersValue = usersValues[n]; 

    var uniName = usersValue[5]; 
    var levelInd = usersValue[2]; 
    var levelMellem = usersValue[3]; 
    var levelUdsk = usersValue[4]; 

// Logger.log(usersValues[n][5]) 

    for(var i=1; i < schemaValues.length ; i++){ 

     var schemaValue = schemaValues[i]; 

     if (schemaValue != null && schemaValue.length > 0) { 

     var level = schemaValue[3]; 
     var subject = schemaValue[4]; 
     var room = schemaValue[5]; 
     var day = schemaValue[6]; 
     var position = schemaValue[7]; 

     var levelAfd = getlevel(level,levelInd, levelMellem, levelUdsk); 
     Logger.log(levelAfd); 

     // print 

     var row=[]; 
     row.push(counter++,'','unilogin:'+ uniName, levelAfd, subject, room, day, position); 
     mergeSht.appendRow(row); 


     } 
    } 
    } 
    } 

    function getlevel(level, levelInd, levelMellem, levelUdsk){ 
     switch (level) 
    { 
     case 1: 
      return levelInd; 
     case 4: 
     return levelMellem; 
     case 7: 
      return levelUdsk; 
    } 
} 
+0

무엇을 시도 했습니까? [질문] – Cooper

+0

질문에 새로운 해결책을 추가했습니다. 지금은 Google Script에서 6 분의 최대 절제 시간을 맞고 있습니다. –

+0

실행 결과는 어떻게 생깁니 까? – Cooper

답변

0

다음은 시도 할 수 뭔가 다른입니다. 대신,로드시에 mergeSht 전체를 한 번에로드합니다.

function merge() 
{ 
    var CurrentDate  = new Date() ; 
    var CurrentDateString1 = Utilities.formatDate(CurrentDate, "GMT", "MM-dd-yyyy HH:mm:ss") ; 
    var ss=SpreadsheetApp.getActive(); 
// var mergeSht=ss.getSheetByName(CurrentDateString1);      
    var users=ss.getSheetByName('users'); 
    var schema=ss.getSheetByName('schema'); 
    var mergeSht = ss.insertSheet(); 
    mergeSht.setName(CurrentDateString1); 
    var usersValues = users.getDataRange().getValues(); 
    var schemaValues = schema.getDataRange().getValues(); 
    var counter = 1; 
    var mergeA=[];//Small change 
    mergeA.push(['H1','H2','H3','H4','H5','H6','H7','H8']); //First row is headers 
    for(var n=1; n < usersValues.length ; n++) 
    { 
    var usersValue = usersValues[n]; 
    var uniName = usersValue[5]; 
    var levelInd = usersValue[2]; 
    var levelMellem = usersValue[3]; 
    var levelUdsk = usersValue[4]; 
// Logger.log(usersValues[n][5]) 
    for(var i=1; i < schemaValues.length ; i++) 
    { 
     var schemaValue = schemaValues[i]; 
     if (schemaValue != null && schemaValue.length > 0) 
     { 
     var level = schemaValue[3]; 
     var subject = schemaValue[4]; 
     var room = schemaValue[5]; 
     var day = schemaValue[6]; 
     var position = schemaValue[7]; 
     var levelAfd=''; 

     switch(level) 
     { 
      case 1: 
      levelAfd=levelInd; 
      break; 
      case 4: 
      levelAfd=levelMellem; 
      break; 
      case 7: 
      levelAfd=levelUdsk; 
      break; 
      default: 
      levelAfd=''; 
      break; 
     } 
     if(levelAfd) 
     { 
      mergeA.push([counter++,'','unilogin:'+ uniName, levelAfd, subject, room, day, position]); 
     } 
     } 
    } 
    } 
    mergeSht.getRange(1,1,mergeA.length,mergeA[0].length).setValues(mergeA); 
} 
+0

재미있을 것 같네요! 그러나 "Google 스프레드 시트 오류 - 배열을 객체 [] []" –

+0

"으로 변환 할 수 없습니다. 오류는 58 행에서 발생합니다."mergeSht.getRange (1,1, mergeA.length, mergeA [0] .length). setValues ​​(mergeA); " –

+0

mergeA 배열에서 약간의 변경을했습니다. 다시 시도하십시오. – Cooper