将列转置为行谷歌应用脚本
Posted
技术标签:
【中文标题】将列转置为行谷歌应用脚本【英文标题】:Transpose column to row google app script 【发布时间】:2022-01-23 02:56:42 【问题描述】:我尝试将列数据转换为行。但是此代码仅转换为一行。例如:在我的代码中,只有工作表 1 (IJKL) 的 Column3 Column4 Column5 Column6 的第一行中的数据被传输到工作表 2 的 row1 row2 row3 row4 的第一行。这样,包含在sheet 1 (ABCDE) (FGH) 的 Column1 和 Column2 正在传输到 sheet 2 的 row2 row5 row6 row7 row8 row9 row10 row10 row11 row12 的第一行。但问题是,Column3 的第二行中的数据,Column4, Sheet 1 (MNOP) 的 Column5 被转移到 Sheet 2 的 row2, row2, row3, row4 的第二行,但是 Sheet 1 (ABCDE) (FGH) 的 Column1 和 Column2 中的数据没有被移动到第二行表 2 行 5 行 6 行 7 行 8 行 9 行 10 行 10 行 11 行 12。 但是,如果您再次运行该脚本,同样的事情会再次发生。现在我想要的只是将工作表 1 的 Column1 和 Column2 中的 (ABCDE) (FGH) 中的数据移动到第 2 行的第一行 row5 row6 row7 row8 row9 row10 row10 row11 row12 和第二行到第二行( MNOP)。
每次执行脚本时,应将工作表 1 的第 1 列和第 2 列中包含的数据连同第 3 列到第 6 列中的数据一起转置到工作表 2。
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);
【问题讨论】:
webapps.stackexchange.com/questions/95178/… 我怀疑“转置”这个词在这种情况下不太正确。 【参考方案1】:不确定我是否理解目标。
你想要这个吗?
这是执行此操作的代码:
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);
【讨论】:
这正是我想要的。非常感谢..【参考方案2】:列到行
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
【讨论】:
以上是关于将列转置为行谷歌应用脚本的主要内容,如果未能解决你的问题,请参考以下文章