【问题标题】:Converting a column to a row using Google Script使用 Google Script 将列转换为行
【发布时间】:2018-04-15 16:51:53
【问题描述】:

我是 Google 脚本的新手,我想将一列的内容转换为如下所示的一行:

结果如下:

我试过这段代码,但执行时没有结果:

function test() {
var ss = SpreadsheetApp.openById("XXXX");
var s = SpreadsheetApp.openById("XXXX");
var sheet = ss.getSheetByName('iGV'); 
var sheete = s.getSheetByName('Sheet1');  
var rangee = sheete.getRange("A1:F7");   
var values = sheet.getRange("F11:F17").getValues(); 
for (var i = 0; i<values.length;i++){
for(var j=0;i<rangee.length;j++){
rangee [i][1]=values[1][j];}}} 

【问题讨论】:

  • 您要转换哪些行/列?
  • 正如我在图片中提到的,我想将第一张图片中列的内容转换为第二张图片中的一行。
  • 我将该列转换为行,但您只想转换 A 列或什么?
  • 我想要的任何列,例如 A。
  • 也许你会觉得这很有帮助stackoverflow.com/questions/28130828/…

标签: excel google-apps-script


【解决方案1】:

这是一个简单的转置:

function myTranspose(A) {
  var B=[];
  for(var i=0;i<A[0].length;i++){
    B[i]=[];
    for(var j=0;j<A.length;j++){
      B[i][j]=A[j][i];
    }
  }
  return B;
}

你可以这样设置:

function testTranspose(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getRange('C1:C8');
  var vA=rg.getValues();
  var vB=myTranspose(vA);//vA is the value array for the range you want to transpose
  sh.getRange(1,sh.getLastColumn()+2,vB.length,vB[0].length).setValues(vB);
}

【讨论】:

  • 我正在尝试你的代码:myTranspose 函数中的 A 未定义。
【解决方案2】:

与其一次设置一个单元格,不如创建一个嵌套数组,然后一次设置整个范围更有效。 setValues() 需要一个嵌套数组,外部数组是行,内部数组是列。因此,此测试代码将“A1:A10”中的值放入“B1:K1”中。

function columnToRow() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var values = sheet.getRange("a1:a10").getValues();
var rowValues = [[]]; //create an array within an array. Outter array is the row. Inner array are the columns.
for (i = 0; i<values.length; i++) {
  rowValues[0].push(values[i][0]); //push the values to the inner array (columns array)
}
var setRange = sheet.getRange(1, 2, 1, rowValues[0].length) //(row, column, numRows, numColumns)
setRange.setValues(rowValues);
}

【讨论】:

    【解决方案3】:

    我认为有一个更简单的内置解决方案(见下文)。只需在 copyTo() 方法中将 'transposed' 设置为 'true':

      var ss = SpreadsheetApp.getActive();
      var sourceSheet = ss.getSheetByName('sourceSheet');
      var targetSheet = ss.getSheetByName('targetSheet');    
      var sourceRange = sourceSheet.getRange(1, 1, sourceSheet.getLastRow(), 1);
      var values = sourceRange.getValues();
      var targetRange = targetSheet.getRange(1, 1, 1, values[0].length);
      sourceRange.copyTo(targetRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES, true);
    

    【讨论】:

    • 感谢您的回答。我也尝试使用 setFormula('=transpose(XXX)');这里的问题是转置只接受来自同一文件的表格
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2022-07-24
    相关资源
    最近更新 更多