Duplicate Rows in Google Spreadsheet based on Valu

2019-04-01 02:32发布

I'm trying to programatically duplicate rows in a Google spreadsheet. I would like the number of times the row is duplicated to be based on one of the values in the row itself.

For example, lets say I have a table like this:

enter image description here

You can see that there are numbers in column C. The value in column C is the number of times I would like to duplicate the row. This is what the desired result would look like:

enter image description here

Technically, if the value in column C was 3, we would be duplicating the row two times.

Any ideas on how to script a Google spreadsheet to do this would be great!

Thanks!

2条回答
戒情不戒烟
2楼-- · 2019-04-01 02:59

This is fairly simple and you should have tried it yourself. I'm sure that when you'll read the code below you'll say "Oh, of course, I could have done it easily"... right ?

function autoDup() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var newData = [];
  for(var n in data){
    newData.push(data[n]);
    if(!Number(data[n][2])){continue};// if column 3 is not a number then do nothing
    for(var c=1 ; c < Number(data[n][2]) ; c++){ // start from 1 instead of 0 because we have already 1 copy
      newData.push(data[n]);//store values
    }
  }
  sheet.getRange(1,1,newData.length,newData[0].length).setValues(newData);// write new data to sheet, overwriting old data
}
查看更多
Luminary・发光体
3楼-- · 2019-04-01 03:05

Assuming your input is on inSheet, on a different sheet you can place the following formula =transpose(split(arrayformula(textjoin(",",false,iferror(rept(inSheet!A1:A&",",inSheet!$C1:$C)))),",")) and drag it right twice and you're done. This could be bulletproofed to handle empty cells or ones with commas or repeat values of 0, but for nice data like above, it works as is.

查看更多
登录 后发表回答