繁体   English   中英

使用主表中的一行数据自动创建一个新表

[英]Automatically create a new sheet with data of a row in the mastersheet

考虑我有一个母版表,其中 A 列中的名称和 B 列中的链接,从第 2 行开始。

下面的代码,出于我不明白的原因,只在第 2 行创建了一个名称为的新工作表,并在新创建的工作表中设置了第 3 行的值。

我希望它按以下方式工作:

  • 创建一个名为 col A 的工作表
  • 在新创建的工作表中设置 col A 和 col B 的值

有人可以帮我弄清楚发生了什么吗? 我阅读了有关循环和 getRange 的文档,但我无法弄清楚..

非常感谢

function createNewSheets() {
  var dataSheet = SpreadsheetApp.getActiveSpreadsheet();
  var values = dataSheet.getSheetByName('mastersheet').getRange('A2:B').getValues();
  
  // Get sheet with current swimmer name:
  var sheet = dataSheet.getSheetByName(swimmerName);

  var col = values[i]; // Current row
  var swimmerName = col[0]; // swimmer name

  // Iterate through all rows of data from "mastersheet":
  for (var i = 1; i < values.length; i++) {

    // Check if sheet with current swimmer name exists. If it doesn't it creates it:
    if (!sheet) {
      sheet = dataSheet.insertSheet(swimmerName);
    }
    
    // Sets current row of data to the new sheet:
    sheet.getRange(1, 1, col.length, col[0].length).setValues(col)
  }
}

我相信你的目标如下。

  • 您想从“mastersheet”表中的“A”和“B”列中检索值。
  • 您想使用从“mastersheet”工作表中检索到的“A”列的值作为工作表名称。
  • 当检索到的工作表名称的工作表在活动电子表格中不存在时,您希望插入具有工作表名称的新工作表。
  • 插入新工作表时,您希望将工作表名称的同一行复制到插入的工作表中。
  • 您想使用 Google Apps 脚本实现此目的。

修改点:

  • 在你的脚本中,

    • var sheet = dataSheet.getSheetByName(swimmerName)swimmerName未声明。
      • 当在其他地方没有声明swimmerName时,此行会发生错误。
    • var col = values[i]处,未声明i
    • 在 for 循环中,
      • 第一个索引是1 getRange('A2:B')开始,在这种情况下,值是从第 3 行检索的。
      • swimmerNamecol没有改变。
  • 为了实现您的目标,我想提出以下流程。

    1. 检索当前工作表名称。
    2. 从“mastersheet”表中检索值。
    3. 使用检索到的工作表名称和值,插入新工作表并放置值。

当上述流程反映到脚本时,它变成如下。

示例脚本:

function createNewSheets() {
  // 1. Retrieve the current sheet names.
  var dataSheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheetNames = dataSheet.getSheets().map(s => s.getSheetName());

  // 2. Retrieve the values from "mastersheet" sheet.
  var masterSheet = dataSheet.getSheetByName('mastersheet');
  var values = masterSheet.getRange('A2:B' + masterSheet.getLastRow()).getValues();

  // 3. Using the retrieved sheet names and values, the new sheets are inserted and the values are put.
  values.forEach(r => {
    if (!sheetNames.includes(r[0])) {
      dataSheet.insertSheet(r[0]).appendRow(r);
      sheetNames.push(r[0]);
    }
  });
}
  • 在此示例脚本中, sheetNames在循环中增长,用于检查重复的工作表名称。

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM