首页 文章

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

提问于
浏览
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)
    }
  }
}

2 回答

  • 0

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

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

    我认为 stuNameListopenById() 不接受(返回Bad值错误) . 尝试在 else 上使用 .openById(sheetID[i]) .

  • 1

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

相关问题