复制 Google Sheet 中的每一行,复制数据集中的第一列为空

Duplicate each rows in Google Sheet with first column in duplicated data set empty

我有一个 google sheet,其中包含一些产品和 SKU

数据如下:

title  |    sku    |  image  | category |  price   
prod1  |  p1-type  |  1.jpg  | cat1     |  1 USD   
prod2  |  p2-type  |  2.jpg  | cat2     |  2 USD   
prod3  |  p3-type  |  3.jpg  | cat2     |  5 USD   

我希望其中的每一行都被复制,它的第一列设置为空,SKU 值附加 "_2"。所以数据如下:

title  |    sku    |  image  | category |  price   
prod1  |  p1-type  |  1.jpg  | cat1     |  1 USD 
       |  p1-type_2|  1.jpg  | cat1     |  1 USD   
prod2  |  p2-type  |  2.jpg  | cat2     |  2 USD   
       |  p2-type_2|  2.jpg  | cat2     |  2 USD   
prod3  |  p3-type  |  3.jpg  | cat2     |  5 USD
       |  p3-type_2|  3.jpg  | cat2     |  5 USD   

我尝试了下面的应用程序脚本,但是我无法更改重复行中的值。如果我更改任何内容,它会在所有行中更改。

function autoDup() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var newData = [];
  
  for(var n in data){

    if(n == 0){
      newData.push(data[n]); //Skip first row
    } else {
      
      newData.push(data[n]);     
      //set data in first column to null
      data[n][0] = "";  //This however set the value in prev row to empty aswell.
      newData.push(data[n]);      
    }
  }

 sheet.getRange(1,1,newData.length,newData[0].length).setValues(newerData);
}
function funkycopy() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet0');
  const vs = sh.getRange(2,1,sh.getLastRow() - 1,sh.getLastColumn()).getValues();
  const oA = [];
  vs.forEach(r => {
    let c = r.slice();
    c[0] = '';
    c[1] = c[1] + '_2';
    oA.push(r);
    oA.push(c);
  });
  sh.getRange(2,1,sh.getLastRow() - 1,sh.getLastColumn()).clearContent();
  sh.getRange(2,1,oA.length,oA[0].length).setValues(oA);
}

Arrow Notation

我想这样就可以了。

function fixRange(){
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const wSh = ss.getActiveSheet();
  var oldValues = wSh.getRange("A2:E" + wSh.getLastRow()).getValues();
  var newValues = [];
  
  for(var i=0;i<oldValues.length;i++){
    if(oldValues[i][0]!=''){
    newValues.push(oldValues[i]);
    newValues.push(['',oldValues[i][1] + '_2',oldValues[i][2],oldValues[i][3],oldValues[i][4]]);
    }
  
  }
  wSh.getRange(2,1,newValues.length,5).setValues(newValues);
}