0

Good morning!

I made a function that transfers data from Sheet1 to Sheet 2.

So instead of using brute force and transfering data one cell at a time, I'm looking for ways for it to be efficient. I have successfully created an array, but problem is when I am transferring the data, instead of it printing horizontally, it is printing vertically.

My code looks like this:

function submitData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Copy of DTR Template"); //class form
  var datasheet = ss.getSheetByName("DTR Records"); //Database

  var valueRange1 = sheet.getRange("C4:C8").getValues();

    for(i = 0; i < valueRange1.length; i++){
    
    datasheet.getRange(datasheet.getLastRow()+1, 1, 6, valueRange1[0].length).setValues(valueRange1);
    } 
Logger.log(valueRange1);
}

A B C D E

1 2 3 4 5

Logger.log(valueRange1) = [[1.0], [2.0], [3.0], [4.0], [5.0]] .

I wanted it to look like this.

Column A Column B Column C Column D Column D
1 2 3 4 5

But it prints like this.

Column A Column B
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5

2 Answers2

0

Replace these lines:

    for(i = 0; i < valueRange1.length; i++) {
      datasheet.getRange(datasheet.getLastRow()+1, 1, 6, valueRange1[0].length).setValues(valueRange1);
    } 

...with this:

    datasheet.appendRow(valueRange1.flat());

See Sheet.appendRow().

doubleunary
  • 13,842
  • 3
  • 18
  • 51
  • This actually works, it's been a longtime since I have coded. I just knew appendRow() just now. :/ Thank you very much! – Timothy Kwok Feb 21 '23 at 09:30
0
function submitData() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Sheet0");
  const dsh = ss.getSheetByName("Sheet1");
  const vs = [sh.getRange("C4:C8").getValues().flat()];
  dsh.getRange(dsh.getLastRow() + 1, 1, vs.length, vs[0].length).setValues(vs);
  Logger.log(JSON.stringify(vs));
}
Cooper
  • 59,616
  • 6
  • 23
  • 54