【问题标题】:Move value in every second row to a new column, Javascript每隔一行将值移动到一个新列,Javascript
【发布时间】:2016-06-17 19:24:28
【问题描述】:

我的电子表格的 A 列中有一个数据集,如下所示,我现在需要将百分比值移动到名称所在行的 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)
}

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

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

【问题讨论】:

  • 你为什么不分享一些你的方法?
  • 请分享你最近的尝试,让我们看到你已经付出了一些努力。毕竟,这是一个问答网站,而不是一个代码编写网站......
  • 已添加代码。我一开始没有添加它,因为它根本不起作用,而且我知道对于有经验的人来说,我需要实现的目标相对简单。我不想浪费别人的时间阅读无用的代码。

标签: javascript google-sheets


【解决方案1】:

长话短说:

声明具有所需长度的二维数组(数组的长度除以 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;
}

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

【讨论】:

  • 谢谢,我理解你的回答,我知道我不会弄明白。我无法将它与我在 OP 中的代码集成,因为我不理解变量函数和参数..您能否建议我如何将它与我的代码集成?再次感谢..
【解决方案2】:

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

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

这个在 C 列并根据需要自动填充

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

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

【讨论】:

  • 感谢您的建议,但我需要通过脚本而不使用公式来执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-29
  • 2019-11-18
  • 2016-06-15
  • 1970-01-01
  • 2023-03-05
  • 2021-11-03
相关资源
最近更新 更多