将多个工作表从一个电子表格复制到另一个电子表格

时间:2016-06-06 15:47:24

标签: javascript loops google-apps-script google-sheets

我正在尝试创建一个脚本,将多张表从一个(未打开的)电子表格复制到另一个(活动电子表格)。

我已经搜索了其他解决方案并使用了我将这段代码放在一起的其他一些建议。我没有编程经验,只是在我的学校开始使用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和名称输入到活动电子表格中。我将运行脚本,脚本应该从源文件中获取表单(未打开)并将它们复制到具有相同名称的活动电子表格中。

请随意对我的代码进行批评,任何帮助都将非常感谢..

更新

我现在有这个工作

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)
    }
  }
}

2 个答案:

答案 0 :(得分:1)

您的“sheetID”似乎是一个包含多个工作表ID的大字符串。我的意思是说

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

我认为openById()的{​​{1}}不接受(返回错误值错误)。尝试在stuNameList上使用.openById(sheetID[i])

答案 1 :(得分:0)

copyTo方法仅适用于Sheet类。

... if ( $&& $args->{port} !~ /20016|20026/)