循环脚本并为单元格指定脚本值(Google 表格脚本)

时间:2021-05-21 12:56:22

标签: google-apps-script google-sheets

我正在尝试在 Google 表格上运行一个脚本,该脚本将允许我复制一定数量的用户并将其添加为列表。

一位同事为我制作了这段代码:

function BulkUpload() {
 var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getCurrentCell().offset(0, 0, 8, 1).activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 8);
  spreadsheet.getCurrentCell().offset(8, 0).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getCurrentCell().offset(9, 0).activate();

因为我需要这个给 36 个用户使用,我所做的就是复制脚本并粘贴了 36 次。这很有效,我最终得到了一份我的 36 个用户的列表,每个用户复制了 9 次,但有两个问题:

  1. 此脚本仅适用于我需要每个用户在列表中出现 9 次的特定场景。
  2. 必须手动复制/粘贴脚本到我拥有的用户数量根本不起作用,我知道这对我来说是一种解决问题的糟糕方法。

为了解决这两个问题,我需要:

  1. 一种让脚本识别单元格上数字的方法,所以如果我在“需要重复次数”单元格中输入“6”,它会告诉脚本只添加 5 行,然后复制所以我得到 6我需要的重复;这样,我就可以指定和更改金额,而无需触摸脚本。
  2. 以类似的方式,一种能够循环脚本 N 次的方法,我也可以在单元格上指定。

举个例子,假设我们有 7 个用户,我想每人复制 6 次。我希望能够访问我的 Google 表格,使用这个小表格并添加所需的数字(即,根据此表格,单元格 B1 中的 5 和单元格 B2 中的 10:

<头>
A 列 B列
需要重复 6
用户 7

然后,在指定之后,我将粘贴列表并运行脚本,这应该带我:

  • 亚历克斯
  • 约翰
  • 山姆
  • 鲍勃
  • 托尼
  • 劳拉
  • 维克多

对此: GoogleSheets Screenshot

为了透明,我必须做的数字非常大(数百个用户和数十次重复)所以这就是我需要脚本的原因,我只是在这里简化了,所以我可以添加一个示例而不会添加太多空间。

请注意,在编码方面,我和我的同事都是完全的初学者,因此可能有更简单的方法来实现这一点;我愿意接受任何其他可以达到相同预期结果的解决方案。

谢谢!

1 个答案:

答案 0 :(得分:0)

您的脚本似乎是手动的,我认为这种方法会更好。但在这个中,您需要在工作表本身上列出名称,无论是在单独的单元格中还是作为参数。

代码:

function BulkUpload(names, repetition) {
  var output = Array(names.length * repetition);

  names.split(",").forEach(function (name, index) {
    output.fill([name.trim()], repetition * index, repetition * (index + 1));
  });
  
  return output;
}

行为:

  • 函数接受 2 个参数,名称和重复次数。它可以是包含名称列表的单元格,也可以传递包含名称的整个字符串(必须以逗号分隔)。
  • 它创建了一个包含 ({number of names} * {repetitions}) 个元素的数组
  • 我们得到的每个名字(用逗号分隔),我们根据它们的重复添加它们
  • 返回包含重复名称的数组

A4 与 B4:

  • =BulkUpload(B2, B1)
  • =BulkUpload("Alex, John, Sam, Bob, Tony, Laura, Victor", B1)

示例输出:

output