Google Apps脚本:在范围内的每个单元格后插入x行

时间:2017-08-04 15:51:20

标签: google-apps-script

我试图在范围内的每个空白单元格之后添加x空白行。 我使用了一个循环,但是使用我的循环,只有第一个单元格受到影响。

在这里,我的代码: 我想我知道我错在哪里(我需要在sheet.insertRowsAfter(i, 5);循环,但我不能这样做......)

谢谢!

function insertRows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("test");

  var sourceRange = sheet.getRange(10, 1, sheet.getLastRow());
  var sheetData = sourceRange.getValues();

  var numRows = sourceRange.getNumRows();
  Logger.log(numRows);

  for (var i=10; i < numRows; i++) {
    sheet.insertRowsAfter(i, 5);
  }
}

2 个答案:

答案 0 :(得分:2)

尝试以下方法。当没有空白单元格时,这将添加3行。

public GameObject spawn;
private float spawnTime = 1;


void Start()
{
    if (GameObject.FindGameObjectsWithTag("Cube").Length < 2)
    {
        spawnTime = Random.Range(1, 3);
        Invoke("Spawn", spawnTime);

    }
}


void Spawn()
{
    if (GameObject.FindGameObjectsWithTag("Cube").Length < 2)
    {
        spawnTime = Random.Range(1, 3);
        Instantiate(spawn, transform.position, Quaternion.identity);
        Invoke("Spawn", spawnTime);

    }
}

答案 1 :(得分:2)

在你的情况下,我们需要从范围的最后开始,然后按照适当的方式添加行。下面的代码将执行此操作并在具有数据的任何行下方添加5行,如果在具有数据的行之后存在空行,则甚至添加行。如果您希望获得更大的灵活性,可以将startRow传递给函数

function insertRows() {
  var startRow = 10;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("test");

  var sourceRange = sheet.getRange(startRow, 1, sheet.getLastRow());
  var sheetData = sourceRange.getValues();

  var numRows = sourceRange.getNumRows() - startRow;
//  Logger.log(numRows);

  for (var i=numRows; i > -1; i--) {
    if (sheetData[i].join("")) {
      sheet.insertRowsAfter(i + startRow, 5);
    }
  }
}

作为一般性评论:您正在检索更多行作为sheet.getLastRow()获取包含数据的最后一个行号,并且getRange()中的用法告诉应用程序提取该行数而不是该数字减去起始位置。