2016-06-06 5 views
0

하나의 (열지 않은) 스프레드 시트에서 다른 스프레드 시트 (활성 스프레드 시트)로 여러 시트를 복사하는 스크립트를 만들려고합니다.하나의 스프레드 시트에서 다른 스프레드 시트로 여러 시트 복사

다른 솔루션을 통해 검색했으며 다른 제안을 사용하여이 코드 조각을 작성했습니다. 프로그래밍 경험이 없으며 학교에서 Google 앱을 사용하기 시작했을 때 Javascript를 배우기 시작했습니다.

약 5 시간이 걸리며 거의 다 왔다고 생각합니다. 그러나 작동시키지 못합니다.

function copySheets() { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var infoPageSheet = ss.getSheetByName("infoPage"); 
    var sheetID = infoPageSheet.getRange("B11").getValues().toString(); //gets the ID of the spreadsheet that contains the sheets I need to copy from cell B11 
    var classSelect = infoPageSheet.getRange("B12:B17").getValues().toString().split(","); // gets the names of the sheets I need to copy (one name per cell) 
    var stuNameList = SpreadsheetApp.openById(sheetID); // opens the target sheet 

    for (var i = 0; i < classSelect.length; i++) { 
     var copy = stuNameList.getSheetByName(classSelect[i]); 
     if (copy) { 
      Logger.log("copy " + classSelect[i] + " already exists"); 
     } else { 
      stuNameList.copyTo(ss).setName(classSelect[i]).showSheet(); 
     } 
    } 
} 

활성 스프레드 시트에 복사하려는 시트의 ID와 이름을 입력합니다. 나는 스크립트를 실행할 것이고 스크립트는 소스 파일 (열지 않은)에서 시트를 가져 와서 같은 이름을 가진 활성 스프레드 시트에 복사해야한다.

당신이 원하는대로 내 코드와 같은 중요 주시기 바랍니다, 어떤 도움을 크게 감상 할 수 ..

UPDATE는

나는이 지금 작업

function getVars() { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sortSheet = ss.getSheetByName("Sorted Scores"); 
    var infoPageSheet = ss.getSheetByName("infoPage"); 
    var sheetID = infoPageSheet.getRange("B11").getValue().toString(); 
    var classSelect1 = infoPageSheet.getRange("B12:B18").getValues().toString().split(","); 

    var classSelect = new Array(); 
    for (var i = 0; i < classSelect1.length; i++) { 
     if (classSelect1[i]) { 
      classSelect.push(classSelect1[i]); 
    } 
} 
     var stuNameList = SpreadsheetApp.openById(sheetID); 

     Logger.log(sheetID) 
     for (var i = 0; i < classSelect.length; i++) { 
     var get = (classSelect[i]); 
     var copy = ss.getSheetByName(classSelect[i]); 
      if (copy) { 
      Logger.log("copy " + classSelect[i] + "already exists"); 
     } else { 
      stuNameList.getSheetByName(get) 
      .copyTo(ss) 
      .setName(get); 
      Logger.log(classSelect) 
    } 
    } 
} 

답변

1

"sheetID"는 여러 개의 시트 ID가있는 큰 문자열로 보입니다. 내가 말을 말은 내가 stuNameListopenById()가 (나쁜 값 오류를 반환) 것을 받아들이는 생각하지 않는다

Logger.log(sheetID) //logs "sampleid,sampleid2,sampleid3" 

것입니다. else에서 .openById(sheetID[i])을 사용해보세요.

0

가지고있다 copyTo 메서드는 Sheet 클래스에서만 사용할 수 있습니다.

for (var i = 0; i < classSelect.length; i++) { 
    var copy = stuNameList.getSheetByName(classSelect[i]); 
    if (copy) { 
     Logger.log("copy " + classSelect[i] + " already exists"); 
    } else { 
     ss.getSheetByName(classSelect[i]) 
      .copyTo(stuNameList) 
      .setName(classSelect[i]); 
    } 
} 
+0

입력 해 주셔서 감사합니다. 그러나 솔루션으로 문제가 해결되지 않습니다. 복사해야하는 시트는 "stuNameList"변수에 있으며 변수를 "ss"변수에 복사해야합니다. 나는에 코드를 변경 한 ss.getSheetByName (classSelect [I]) .copyTo (stuNameList) .setName (classSelect [I]); 하지만 여전히 아무 일도 일어나지 않습니다! –

관련 문제