谷歌企业应用脚本:在范围内的每个单元格后插入x行



我正在尝试在一个范围内每个没有空白单元格之后添加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);
}
}

在您的情况下,我们需要从范围的末尾开始,然后逐步向上,在适当的地方添加行。 下面的代码将执行此操作,并在任何有数据的行下方添加 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(( 中的使用告诉应用程序拉动该行数,而不是该数字减去起始位置。

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

function insertRows() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("test");
var sourceRange = sheet.getRange(1, 1, sheet.getLastRow());
var sheetData = sourceRange.getValues();
for (var i=0; i < sheetData.length; i++) {
if(sheetData[i][0]!=""){
sheet.insertRowsAfter(i+1, 3);
sheetData = sheet.getRange(1, 1, sheet.getLastRow()).getValues();
}
}
}

最新更新