首页 > 解决方案 > 谷歌脚本 .push() 复制行并添加票号

问题描述

所以我目前正在根据 uniqueIDs 生成票号。对于每个人都有一些数据,其中最重要的是[uniqueID, ticketNumber(目前为空), numberOfEntries,...]。我想要生成的是一个列表,如果有人有 3 个条目,他们将有三行,唯一的区别是票号。我希望票号的形式为 UniqueID-1、UniqueID-2、UniqueID-3 等。

到目前为止,我有这个:

function autoDup() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
  var data = sheet.getDataRange().getValues();
  var newData = [];
  var temp = [];
  
  for(var n in data){
    var unID = data[n][0]; //get uniqueID from column 1
    if(!Number(data[n][2])){continue};// if column 3 is not a number then do nothing
    for(var c=0 ; c < Number(data[n][2]) ; c++){ //loop through the entries
      temp[c] = data[n];
      temp[c][1] = String(unID) + "-" + String(c+1);
      Logger.log(temp[c]);
      newData.push(temp[c]);//store values
      Logger.log(newData);
    }
  }
  
  sheet.getRange(1,1,newData.length,newData[0].length).setValues(newData);// write new data to sheet, overwriting old data
}

在执行日志中,我得到了temp[c]生成我想要的数据,但newData.push(temp[c])最终覆盖了以前的推送,并且我得到了为特定条目重复的相同票号。这不是我所期望的,我不明白我哪里出错了?

如果我没有解释清楚,请告诉我,我会澄清任何要点。

标签: google-apps-scriptgoogle-sheets

解决方案


我解决了,该行temp[c] = data[n];通过引用而不是 vale 传递值,所以在推送时,它正在推送引用,这显然是错误的。因此,通过将其更改为temp[c] = [...data[n]];我解决了问题。


推荐阅读