Javascript 通过循环将列转换为行
我正在尝试将一个范围从一张图纸转换到另一张图纸(将列内容复制到一行)。但问题是,每行填充的列数不同,我不希望将空白列复制到输出表中 所以我试着做以下几点:Javascript 通过循环将列转换为行,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我正在尝试将一个范围从一张图纸转换到另一张图纸(将列内容复制到一行)。但问题是,每行填充的列数不同,我不希望将空白列复制到输出表中 所以我试着做以下几点: 转到“导入操作”选项卡 逐行(在循环中),检查最后填充的列是什么 然后逐个列(第二个循环),复制每个单元格的值,然后将其粘贴到第一行的“转置”表中 继续执行此操作,直到复制上一个填充的列,然后移到下一行 重复 我已经运行了调试器,但没有出现任何问题,但是当我运行该函数时,它不会将任何内容粘贴到“测试”表中。有什么建议吗 function tr
function transpose(sh) {
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Import Manipulation");
var lastrow = sh.getLastRow();
var numrows = lastrow;
for(var i= 1; i<= numrows; i++) {
Logger.log(i);
var rowrange = sh.getRange(i, 50);
Logger.log(rowrange);
var lastcol = rowrange.getValues().length;
for(var j=5; j<= lastcol; j++) {
var colrange = sh.getRange(i,j);
var copycell = colrange.getValue();
var pastesheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test");
var pasterow = pastesheet.getLastRow();
Logger.log(pasterow);
var pastecell = pastesheet.getRange(pasterow + 1, 1);
Logger.log(pastecell);
var doit = pastecell.setValue(copycell);
doit(pastecell);
}
}
}
函数转置(sh){
var sh=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“导入操作”);
var lastrow=sh.getLastRow();
var numrows=lastrow;
对于(var i=1;i这行代码:
var rowrange = sh.getRange(i, 50);
仅获取一个单元格。在第一个循环中,它获取第1行第50列中的单元格
此行中的变量lastcol
:
var lastcol = rowrange.getValues().length;
将始终为1。getValues()
获取一个2D数组,在本例中为[[cellValue]]
我创建了一些新代码:
function transpose(sh) {
var arrayThisRow,cellValue,i,j,lastCol,lastrow,numrows,pastesheet,
rowrange,rowValues,sh;
sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Import Manipulation");
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,1,1,lastCol);
//Logger.log(rowrange);
rowValues = rowrange.getValues();//
rowValues = rowValues[0];//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)
}
}
函数转置(sh){
var arrayThisRow、cellValue、i、j、lastCol、lastrow、NumRow、pastesheet、,
行范围,行值,sh;
sh=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“导入操作”);
pastesheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“测试”);
lastrow=sh.getLastRow();
lastCol=sh.getLastColumn();
Logger.log('lastCol:'+lastCol);
numrows=最后一行;
arrayThisRow=[];
对于(i=1;i我能够这样做,使其转换,并且它正在工作(虽然可能不是最有效的)…感谢关于如何使其更有效的建议
function transpose(sh) {
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Import Manipulation");
var lastrow = sh.getLastRow();
var numrows = lastrow;
var lastcol = sh.getLastColumn();
for(var i= 1; i<= numrows; i++) {
Logger.log(i);
var rowrange = sh.getRange(i,1,1,lastcol);
Logger.log(rowrange);
for(var j=5; j<= lastcol; j++) {
var colrange = sh.getRange(i,j);
var copycell = colrange.getValue();
var pastesheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Transpose");
var pasterow = pastesheet.getLastRow();
Logger.log(pasterow);
var pastecell = pastesheet.getRange(pasterow + 1, 1);
Logger.log(pastecell);
pastecell.setValue(copycell);
}
}
}
函数转置(sh){
var sh=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“导入操作”);
var lastrow=sh.getLastRow();
var numrows=lastrow;
var lastcol=sh.getLastColumn();
对于(var i=1;iThanks!我尝试了这个方法,但它似乎只是按照原始工作表的外观进行复制和粘贴,而不是转置。我想要的是这样的东西(假设连字符在列之间是分隔符):第1行:[1-2-3-4]第2行:[1-2-3]第3行:[1-2]看起来像这样(每个值在一行中):1 2 3 4 1 2 3 1 2哦,很抱歉。我做了一些小改动,并对其进行了测试,我认为它现在可以工作了。很好,我也会尝试一下。再次感谢