将数据从一个工作表复制到另一个工作表时,如何仅选择特定列?

时间:2017-02-27 08:54:17

标签: google-apps-script

我只需几行代码即可将一些数据从一个工作表复制到另一个工作表:

rng1Array

使用变量sheet1.getRange(1, 1, sheet1.getLastRow(),sheet1.getLastColumn()).getValues()[x][x]) 我选择整行数据,但是我希望能够只选择每行中的一些元素。

最好的方法是什么?我是否必须使用以下内容逐个选择每个单元格:

Data1 Data2 Data3 Data4 Data5 Data6

换句话说,如果我有以下数据集:

function Copy_data() {

var sheet1 = SpreadsheetApp.openById("ID").getSheetByName("Sheet1");
var sheet2 = SpreadsheetApp.openById("ID").getSheetByName("Sheet2");

var date1 = sheet1.getRange(1, 1, sheet1.getLastRow()).getValues(); 
var date2 = sheet2.getRange(1, 1, sheet2.getLastRow()).getValues(); 

  for (var i = date2.length; i < date1.length; i++){
        var rng1Array = sheet1.getRange(i+1,1,1,sheet1.getLastColumn()).getValues();
        sheet2.getRange(i+1,1,1,sheet1.getLastColumn()).setValues(rng1Array);
    }
  }

仅选择Data2,Data4和Data6的最佳方法是什么?

如果需要,这里是完整的脚本:

class UserProfile(models.Model):
   user = models.OneToOneField(User)
   phone = models.CharField(max_length=256, blank=True, null=True)
   gender = models.CharField(
        max_length=1, choices=(('m', _('Male')), ('f', _('Female'))),
        blank=True, null=True)

1 个答案:

答案 0 :(得分:1)

虽然在写作方面可能会有点麻烦,但它的用途要多得多。您可以在标准j ++或j + = 2中递增列索引,或者您可以使用标准j ++并使其成为另一个数组的索引,这使您可以轻松地操作输出列的顺序和选择。最后,目标范围的大小由目标数组的最终大小决定。所以它符合setValues的要求,应该非常可行。我只使用了四列数据,因此您可能希望修改colA中的列大小和列数,以选择所需的输入数据列。你也可以通过简单地考虑srngA指数而不是那个列......你的电话来避免减1。

function Copy_data() 
{
  var src = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("source");
  var des = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("destination");
  var srng = src.getDataRange(); 
  var srngA = srng.getValues(); 
  var drngA = [];
  var colA = [1,3,2,4];//indirect data column selection
  for (var i = 0; i < srngA.length;i++ )
  {
    var k = 0;
    drngA[i]=[];
    for(var j=0;j<srngA[i].length;j++)
    {
        drngA[i][k++] = srngA[i][colA[j]-1];
    }
    drng = des.getRange(1,1,drngA.length,drngA[0].length);//destination array controls size of destination range.
    drng.setValues(drngA);
  }
}

我猜想你可以在你思考的方向上进一步思考。