从列中复制值并转置到下一个空白行

时间:2019-01-20 20:28:21

标签: google-apps-script google-sheets

我要从特定列复制值,然后将它们以转置方式粘贴到第一列中,因此,如果a垂直输入3个值,则将它们水平粘贴到下一个可用行中。

Example

我使用了appendRow函数,但将值粘贴在源值下方,而不是在目标标头之后。

使用此代码后,我得到以下信息:,但是没有将值粘贴到第一行(标题)之后

Results

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 :(得分:0)

我不确定您要在这里完成什么。

如果在您的示例中输入了三个以上的值,您是否希望第4、5和6th个值位于第二行?换句话说,您是否希望每行专门粘贴3个值?

编辑:

此功能可以解决问题。它不是最漂亮的代码,但是应该完成工作。还有很多其他方法可以创建对象,但这就是我写它时自然想到的方法:)

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);

}