将列转为行 google 应用脚本

Transpose column to row google app script

我试图将列数据转置为行。但是此代码仅转置为一行。例如:在我的代码中,只有 sheet 1 (I J K L) 的 Column3 Column4 Column5 Column6 的第一行中的数据被传输到 sheet 2 的 row1 row2 row3 row4 的第一行. 至此,sheet 1 (A B C D E) (F G H)的Column1和Column2中的数据被传输到sheet 2的row2 row5 row6 row7 row8 row9 row10 row10 row11 row12的第一行。但是问题是,Sheet1的第二行Column3,Column4,Column5的数据(M N O P)被转移到Sheet2的第二行row2,row2,row3,row4,但是Sheet 1 (A B C D E) (F G H) 的 Column1 和 Column2 中的数据未移动到 sheet2 row5 row6 row7 row8 row9 row10 row10 row11 row12 的第二行。 但是,如果您第二次 运行 脚本,同样的事情会再次发生。现在我想要的只是将 sheet 1 的 Column1 和 Column2 中的 (A B C D E) (F G H) 中的数据移动到第 2 行的第一行 row5 row6 row7 row8 row9 row10 row10 row11 row12 和第二行到第二行 (M N O P).

The data contained in columns 1 and 2 of sheet 1 should be transposed to sheet 2 along with the data from columns 3 to 6 each time the script is being executed.

function transpose() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sh1 = ss.getSheetByName('Sheet1');
var sh2 = ss.getSheetByName('Sheet2');
var lr = sh2.getLastRow()+1;
var gv1 = sh1.getRange('D10:G13').getValues().filter(r => r.some(e => e));
var gv2 = sh1.getRange('A2:A6').getValues();
var gv3 = sh1.getRange('B3:B5').getValues();

var result1 = [];
var result2 = [];


for(var col = 0; col < gv2[0].length; col++){
  result1[col]=[];
  for(var row = 0; row < gv2.length; row++){
    result1[col][row] = gv2[row][col];
  }
} 
for(var col = 0; col < gv3[0].length; col++){
  result2[col]=[];
   for(var row = 0; row < gv3.length; row++){
    result2[col][row] = gv3[row][col];
  }


var sv1 = sh2.getRange(lr,1,gv1.length,gv1[0].length).setValues(gv1);
var sv2 = sh2.getRange(lr,5,result1.length,result1[0].length).setValues(result1);
var sv3 = sh2.getRange(lr,10,result2.length,result2[0].length).setValues(result2);

}

不确定我是否理解目标。

你想要这个吗?

这是执行此操作的代码:

function transpose() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sh1 = ss.getSheetByName('Sheet1');
  var sh2 = ss.getSheetByName('Sheet2');
  var lr = sh2.getLastRow()+1;
  var gv1 = sh1.getRange('D10:G13').getValues().filter(r => r.some(e => e));
  var gv2 = sh1.getRange('A2:A6').getValues();
  var gv3 = sh1.getRange('B3:B5').getValues();

  var result1 = [...gv1[0], ...gv2.flat(), ...gv3.flat()];
  var result2 = [...gv1[1], ...gv2.flat(), ...gv3.flat()];

  var results = [result1, result2];

  sh2.getRange(lr,1,results.length, results[0].length).setValues(results);
}

列到行

function coltorow() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Sheet Name");//add sheet name
  return [sh.getRange(1,col,sh.getLastRow(),1).getValues().flat()];//edit col
}