将行和列数据转换为仅列

时间:2016-02-24 19:41:59

标签: google-apps-script google-sheets

我是Google Script的新手,所以请耐心等待。我正在尝试编写一个脚本,该脚本将从多个行和列中获取数据,然后将其重写为具有间距的单个列。

所以行

1a 1b 1c

2a 2b 2c

3a 3b 3c

将成为......

1A

图1b

1C

2A

2B

2C

等...

到目前为止我还没有任何东西。我不明白如何在阵列中访问每个不同的数据。任何帮助/指导将不胜感激。

function copyRow(){
  var sheet = SpreadsheetApp.getActive();
  var numRows = sheet.getDataRange().getNumRows();
  var rowIdx = sheet.getActiveRange().getRowIndex();
  sheet.getRange(rowIdx, 1, 1, sheet.getLastRow()).getValues();
  for(var i = 0; i < numRows; i++){

  }
}

3 个答案:

答案 0 :(得分:0)

试试这段代码。 getValues()方法获得二维数组。每个内部数组都是一个新行。每个内部数组的每个元素都是新列中的单元格。 2D阵列可以折叠成规则阵列,没有外部阵列。但是要编写值,需要一个2D数组,因此下面的代码会创建一个新的2D数组。每个内部数组只有一个值。

function copyRow() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getActiveSheet();

  var numRows = sheet.getLastRow();
  var rowIdx = sheet.getActiveRange().getRowIndex();
  Logger.log('rowIdx: ' + rowIdx);

  //getRange(start row, start column, number of rows, number of columns)
  var theValues = sheet.getRange(rowIdx,1,sheet.getLastRow()).getValues();
  Logger.log('theValues.length: ' + theValues.length);

  theValues = theValues.toString().split(",");//convert 2D array to 1D
  Logger.log('theValues.length: ' + theValues.length);

  var outerArray = [];

  for(var i=0; i<theValues.length; i++){
    Logger.log('theValues[i]: ' + theValues[i]);
    outerArray.push(theValues[i]);
  };

  Logger.log('outerArray.length: ' + outerArray.length);
  sheet.getRange(1,1,outerArray.length,outerArray[0].length).setValues(outerArray);
};

尝试一下,看它是否有效,让我知道。

答案 1 :(得分:0)

你不需要脚本。把这个公式放在一个单元格中:

=transpose(split(join(" ",A1:A3)," "))

您可以加入多个行和列。我在A和A列中提供的数据上对此进行了测试。 B行1到3.工作正常。

=transpose(split(join(" ",A1:A3,B1:B3)," "))

答案 2 :(得分:0)

这似乎有效。手动迭代数组并使用for循环设置它。

 function copyRow() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getActiveSheet();

  var numRows = sheet.getLastRow();
  var rowIdx = sheet.getActiveRange().getRowIndex();
  var colIdx = sheet.getActiveRange().getColumnIndex();

  var theValues = sheet.getRange(rowIdx,colIdx,sheet.getLastRow(),3).getValues();

  theValues = theValues.toString().split(",");//convert 2D array to 1D

  var outerArray = [];

  for(var i=0; i<theValues.length; i++){
    outerArray.push(theValues[i]);
  };
Logger.log(outerArray);

//  sheet.getRange(1,1,outerArray.length,30).setValues(outerArray);

  for(var i = 0; i < outerArray.length; i++){
    sheet.getRange(30 + i, 1).setValue(outerArray[i]);
  }
};