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哦,很抱歉。我做了一些小改动,并对其进行了测试,我认为它现在可以工作了。很好,我也会尝试一下。再次感谢