簡體   English   中英

將多個工作表從一個電子表格復制到另一個電子表格

[英]Copy several sheets from one spreadsheet to another spreadsheet

我正在嘗試創建一個腳本,以將多個工作表從一個(未打開的)電子表格復制到另一個(活動的電子表格)。

我搜索了其他解決方案,並使用了將這些代碼組合在一起的一些其他建議。 我沒有編程經驗,只是在我的學校開始使用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)
    }
  }
}

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

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

我認為openById() stuNameList接受(返回錯誤值錯誤)。 嘗試在您的else上使用.openById(sheetID[i])

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM