将每隔一行中的值移动到新列Javascript

时间:2016-06-17 19:24:29

标签: javascript google-sheets

我有一个数据集,如下图所示,在我的电子表格的col A中,我现在需要将百分比值移动到与名称相同的行上的col B.

  A        
1 John     
2 100%       
3 Mike      
4 100%     
5 Paul
6 100%
7 Ken
8 100%

我需要将每隔一行移到一个新列,所以它应该看起来像这样

   A    B
1 John 100%
2 Mike 100%
3 Paul 100%
4 Ken  100%
6 John 100%
7 John 100%

我尝试了一些不同的方法,但我无法让它起作用!

非常感谢任何帮助。

编辑

包含我尝试过的一些代码,我使用的是reg。表达式过滤掉一些其他数据,然后我需要对百分比值进行转换。

function myFunction() {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sortSheet = ss.getSheetByName("Sheet1");
var lastRow = sortSheet.getLastRow();
var searchData = sortSheet.getRange(1,1,lastRow,1).clear({formatOnly:true})
    .setNumberFormat('@STRING@').getValues(); 

var regExp = new RegExp ('^[0-9]{2} [A-Za-z]{3} [0-9]{4}$');

   for(var y =searchData.length - 1; y >= 0 ; y--) {

       if(regExp.test(searchData[y])) {

 var rowIndex = (y); Logger.log("Row index" + rowIndex)
                sortSheet.deleteRow(rowIndex + 2).deleteRow(rowIndex + 1);

 }
}

var searchData2 = sortSheet.getRange(1,1,lastRow,1).getValues(); 
var regExp2 = new RegExp ('^[0-9]{2}%$');

for(var x =searchData2.length ; x >= 0 ; x--) {

    if(regExp2.test(searchData[x])) {

      var getPercentage = new Array;
      var rowIndex2 = (x); Logger.log("Row index" + rowIndex2)
      var temp = searchData2[x];
      getPercentage.push([searchData2]); Logger.log(getPercentage)

 }
}
    var paste = sortSheet.getRange(1, 2, getPercentage.length,
             1).setValues(getPercentage)
}

这不是我在发布此问题之前删除的确切代码。

请随时向我提供一些有关如何改进代码的建议。 (我刚开始学习2周前的Javascript)

2 个答案:

答案 0 :(得分:0)

长话短说:

声明具有所需长度的二维数组(数组的长度除以2)。

循环并将每个第二个元素放入[x] [1],将所有其他元素放入[x] [0]

var sort = function(arr) {
  var b = new Array(arr.length / 2)
  for (i=0; i <3; i++)
    b[i]=new Array(1);
  
  arr.forEach(function(value, index, arr) {
  	if(index % 2 == 0 || index == 0) {
    	b[Math.floor(index / 2)][0] = value;
    } else {
    	b[Math.floor(index / 2)][1] = value;
    }
  });
  return b;
}

在这里,我采用快速而肮脏的方法。随意改进它。

答案 1 :(得分:0)

您可以在B列上使用以下公式,并根据需要自动填充

=indirect(ADDRESS(ROW() * 2 - 1,COLUMN()-1) )

这一个在C栏上,并在必要时自动填充

=indirect(ADDRESS(ROW() * 2,COLUMN()-2) )

对于这种情况,您的数据位于A列,最后您的结果将位于B和C