2016-06-06 5 views
0

Я пытаюсь создать сценарий для копирования нескольких листов из одной (нераскрытой) таблицы в другую (активная электронная таблица).Скопируйте несколько листов из одной таблицы в другую таблицу

Я искал другие решения и использовал некоторые другие предложения, которые я собрал вместе с этим кодом. У меня нет опыта программирования и я начал изучать Javascript, когда моя школа начала использовать приложения Google.

Мне потребовалось около 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(); 
     } 
    } 
} 

Я буду вводить идентификатор и имена листов, которые я хочу скопировать в активную электронную таблицу. Я запустил скрипт, и скрипт должен получить листы из исходного файла (нераскрытого) и скопировать их в активную электронную таблицу с тем же именем.

Пожалуйста, не стесняйтесь быть критически моего кода, как вы хотите, любая помощь будет принята с благодарностью ..

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

Ваш «листID» кажется большой струной с несколькими идентификаторами листа. То, что я хочу сказать, что

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

Я не думаю, что openById() из stuNameList признает, что (возвращает ошибку Bad значения). Попробуйте использовать .openById(sheetID[i]) на else.

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 [я]) .copyTo (stuNameList) .setName (classSelect [я]); Но все равно ничего не происходит! –

Смежные вопросы