2017-08-04 7 views
0

範囲内に空白のセルがなくなるたびにx個の空白行を追加しようとしています。 私はループを使用しますが、私のループでは、最初のセルだけが影響を受けます。ここで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); 
    } 
} 
+0

サンプルシートを共有できますか?私が正しくあなたを理解している場合は、例えば1-100行の範囲があり、20行、40行、60行が空白の場合がありますので、この後に空白の行が5行追加されます。これが本当であることを認識すると、行20の後に5行を追加すると、他の空白行が5行移動して、例の行45と65になります。 –

+0

確かに!この例は次のとおりです。https://docs.google.com/spreadsheets/d/1JiTJbfTZpMRv3b1OTDmUp42yPvJclpr3ZVcMvERS2Gc/edit?usp=sharing 10行あり、すべての行の後に3行追加する必要があります。 – christophebazin

答えて

2

場合によっては、範囲の最後から開始し、適切な場合は行を追加する必要があります。下のコードはこれを行い、データを持つ行の下に5行を追加します。データがある行の後ろに空白の行がある場合は行を追加します。あなたはより多くの柔軟性をご希望の場合は、一般的なコメントとして

機能に
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); 
    } 
    } 
} 

をstartRow属性を渡すことができます。あなたはsheet.getLastRow(のように、必要に応じて複数の行を取得している)データとの最後の行番号とgetRangeでの使用を取得します()は、その数から開始位置を差し引いた行数を取得するようにアプリケーションに指示しています。

+0

魅力的な作品^^ – christophebazin

2

以下を試してください。これは空白セルがない場合に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(); 
    } 
    } 
} 
+1

それは仕事です:)ありがとう! – christophebazin

関連する問題