Скопируйте значения из столбца и перенесите в следующую пустую строку - PullRequest
0 голосов
/ 20 января 2019

Я хочу скопировать значения из определенного столбца, а затем вставить их в транспонирование в первые столбцы, поэтому, если a введите 3 значения по вертикали, вставьте их горизонтально в следующую доступную строку.

Example

Я использовал функцию appendRow, но вставляю значения в соответствии с исходными значениями, а не после заголовка назначения.

После использования этого кода я получаю следующее: , но не вставляет значения после первой строки (заголовка)

Результаты

function transpose(sh) {
  var arrayThisRow,cellValue,i,j,lastCol,lastrow,numrows,pastesheet,
      rowrange,rowValues,sh;

  sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test");
  pastesheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test");

  lastrow = sh.getLastRow();
  lastCol = sh.getLastColumn();
  Logger.log('lastCol: ' + lastCol);

  numrows = lastrow;
  arrayThisRow = [];

  for(i=1; i<= numrows; i++) {
    //Logger.log(i);
    rowrange = sh.getRange(i,4,2,lastCol);
    //Logger.log(rowrange);

    rowValues = rowrange.getValues();//
    rowValues = rowValues[1];//There is only 1 inner array

    for(j=0; j <= lastCol; j++) {

      cellValue = rowValues[j];

      if (cellValue) {
        arrayThisRow.push(cellValue);
      } else {
        break;//Stop pushing values into the array as soon as a blank cell is found
      }
    }
  }

  Logger.log('arrayThisRow: ' + arrayThisRow)
  if (arrayThisRow.length > 0) {
    pastesheet.appendRow(arrayThisRow)
  }
}

1 Ответ

0 голосов
/ 21 января 2019

Я не совсем уверен, чего вы хотите достичь здесь.

Если в вашем примере вводится более трех значений, вы бы хотели, чтобы 4-е, 5-е и 6-е значения были во второй строке? Другими словами, вы хотите вставить конкретно 3 значения в строку?

Edit:

Эта функция должна помочь. Это не самый красивый код, но должен выполнить свою работу. Существует множество других способов создания объекта, но так я и поступил естественным образом, когда я его написал:)

function myFunction() {
  //Get values of all nonEmpty cells
  var ss = SpreadsheetApp.getActiveSheet();
  var values = ss.getRange("D:D").getValues().filter(String);

  //Create object with 3 columns max
  var pasteValues = [];
  var row = ["","",""];
  for (i = 1; i<values.length+1; i++){
    row.splice((i%3)-1,1,values[i-1]);
    if(i%3 == 0){
      pasteValues.push(row);
      var row = ["","",""]
    }
  }
  if(row != []){
    pasteValues.push(row)
  }

  //Paste the object in columns A to C
  ss.getRange(1,1,pasteValues.length,pasteValues[0].length).setValues(pasteValues);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...