【问题标题】:Simple Google Spreadsheet Script to loop copy and paste cells简单的谷歌电子表格脚本循环复制和粘贴单元格
【发布时间】:2016-04-26 00:31:08
【问题描述】:

所以这很可能是最简单的问题,但我只是自己学习。抱歉这个愚蠢的问题。

我有一个巨大的 Google 电子表格(超过 2700 行)我需要循环并自动将数据从一个单元格 (dataA) 移动到另一个单元格(在以 dataB 开头的下一行数据之前),然后删除 3数据行上方的行并移动到下一条记录(4 行的块)。在我做任何事情之前,我必须通过插入一列来腾出空间。

我创建了一个插入列的函数,将第一个数据单元格(现在是 B2)复制到其新目标(A4),然后正确删除目标上方无用的三行。因为这是相对的和迭代的,所以我不知道如何使用循环来调整这部分,该循环将遍历整个工作表的其余部分。

如何创建一个循环,遍历每个 4 行块,执行上述操作,然后移动到下一个 4 行块,将每个完成的行一个接一个地留在顶部?

这是一个起始数据结构的例子:

starting data structure - one record of many

function moveValuesOnly() {
  var ss = SpreadsheetApp.getActiveSpreadsheet ();

  var sheet = ss.getSheets()[0];

  // This inserts a column in the first column position
  sheet.insertColumnBefore(1);

  var start = ss.getRange("B2");

  var source = ss.getRange("B2");
  source.copyTo (ss.getRange ("A4"), {contentsOnly: true});
  source.clear ();
  sheet.deleteRows(1, 3);
}

【问题讨论】:

  • 我会写一个函数来做到这一点。您需要使用 getRange 的行、列值而不是 A1 表示法。将工作表作为参数传递给函数,并将源行/列和目标行/列作为参数传递。然后遍历您的行并根据需要调用此函数递增行/列。也可以更快地创建一个新工作表而不是删除旧行。
  • 我理解它在理论上是如何工作的,语法本身就是我挣扎的地方。

标签: google-apps-script google-sheets


【解决方案1】:

要创建循环,您首先需要知道应该从哪里开始、何时停止以及前进的速度。

您从第一行开始,一直到您可以使用getLastRow() 获得的最后一行,一步完成 4 行。

我建议您调整 moveValuesOnly() 以接受输入 rowstart 并使用循环多次调用它,但使用不同的行值。请注意,您必须将当前硬编码的“B2”和“A4”输入更改为基于 rowstart 值的内容。 getDataRange().getValues(); 可能对您编辑工作表有用。

循环看起来像

for (i=0; i<sheet.getLastRow(); i+=4) {
  moveValuesOnly(i);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多