【问题标题】:Copy several sheets from one spreadsheet to another spreadsheet将多个工作表从一个电子表格复制到另一个电子表格
【发布时间】:2016-10-06 07:28:09
【问题描述】:

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

我已经搜索了其他解决方案并使用了一些其他建议,我将这段代码放在了一起。我没有编程经验,在学校开始使用 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)
    }
  }
}

【问题讨论】:

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


    【解决方案1】:

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

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

    我认为stuNameList 中的openById() 不接受这一点(返回错误值错误)。尝试在您的 else 上使用 .openById(sheetID[i])

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢您的意见,但您的解决方案仍然无法解决我的问题。我需要复制的工作表在“stuNameList”变量中,我需要将它们复制到“ss”变量中。我已将您的代码更改为 ss.getSheetByName(classSelect[i]) .copyTo(stuNameList) .setName(classSelect[i]);但仍然没有任何反应!
      猜你喜欢
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 2013-07-03
      相关资源
      最近更新 更多