首页 > 解决方案 > 在 Google Sheets 脚本编辑器上创建嵌套 For-Loop 以将数据自动提取为所需格式

问题描述

我正在尝试提出一个函数,可以将数据从一个工作簿提取到另一个具有单独格式的工作簿。我将工作簿称为“源”和“目标”。因此,在“来源”上,我将数据安排在年度标签中。但是,在“目的地”上,我有指示区域的选项卡。我附上了这两个工作簿的快照。

由于我没有编程基础,因此我尝试编写代码,但效果不佳。以下是我在嵌套 for 循环中的尝试,它首先从第一个区域(“Ampang”)的“2015”选项卡中提取数据,并将其粘贴到“Ampang”选项卡和“2015”中的另一个工作簿中排。我运行了调试功能,它说“var data”是未定义的。

function D() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();//open destination worksheet
  var sss = ss.getSheets(); //get all destination sheets


  //var sheetname = ss.getSheetName(); //get sheet names
  var sheet1 = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1jJ8QysQTmS5tG4wvNCxqdbWvAbdbmJm5uatdgIHe6tw/edit#gid=793399042"); //open where data is located
  var sheet = sheet1.getSheets(); //get all the sheets required


  for (j = 0; j<sss.length; j++) {
  for (i = 0; i <sheet.length; i++) {
    switch(sheet[i].getSheetName()) {
      case "Main Menu" :
      break;
      default:
      var data = sheet.getSheets()[i].getRange(i+1, i+2, 1, 2); //get the data for Specific Region and then Changing the Year
      var destination = sss[j].getRange(j,j+1,1,2); //pasting the data to the specific year at the Specific Region Tab/
      data.copyTo(destination); 

    }
  }

} }

[更新 1] 因此,我意识到当数据位于单独的工作簿中时,copyTo() 函数不起作用,因此我提出了以下新代码:

function D() {
  // define the source sheets
  var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1jJ8QysQTmS5tG4wvNCxqdbWvAbdbmJm5uatdgIHe6tw/edit#gid=793399042");

  // get all source sheets
  var source = ss.getSheets();

  // define the target sheets
  var ts = SpreadsheetApp.getActiveSpreadsheet();

  // get all target sheets
  var target = ts.getSheets();

  // set nested for-loop
  for (j = 0; j < target.length; j++) { 
  for (i = 0; i < source.length; i++) {
    if (source[i].getSheetName() !== "Main Menu") {
    var rangeSource = source[i].getRange(i+1,i+1,1,2); // get the source range
      var values = rangeSource[i].getValues(); // get the values from the set range
    } 
    if (target[j].getSheetName() !== "Main Menu") {
      var rangeTarget = target[j].getRange(j+1,j+1,1,2); //get the target range
      rangeTarget.setValues(values[i]); // paste the values to the target range
    }
  }
  }
}

但是,var rangeSource 和值当前未定义。我仍在努力寻找错误的根源。

源表快照

目标表格快照

标签: javascriptfor-loopgoogle-sheets

解决方案


您已将sheet所有工作表定义为

  var sheet = sheet1.getSheets(); //get all the sheets required

所以data需要

  var data = sheet[i].getRange(i+1, i+2, 1, 2); //get the data for Specific Region and then Changing the Year

看看有没有帮助。


推荐阅读