2017-02-27 43 views
1

我复制,从一个表的一些数据与代码,就几行另一片:与变量rng1Array我选择数据的整行如何在从一张纸上复制数据时仅选择特定列?

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); 
       } 
       } 

,但是我希望能够选择每行只有一些元素。

这样做的最好方法是什么?我必须用这样的选择每个细胞挨个:

sheet1.getRange(1, 1, sheet1.getLastRow(),sheet1.getLastColumn()).getValues()[x][x]) 

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

Data1 Data2 Data3 Data4 Data5 Data6 

是什么,只选择最好的方法例如Data2,Data4和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); 
    } 
    } 
+1

我无法想出任何方式可以直接选择范围内的随机列或值。另一方面,我会建议你不要选择你想要的每一个值,选择整行并且在迭代器的帮助下忽略你不想要的值(比如for循环中的'i')。例如。如果我= 1忽略,如果我= 3,忽略等......如果你忽略的列在表中总是相同的,那么我会建议在另一个表中使用** importrange **并选择你想要的列在查询的帮助下,然后只读取该表作为输入。 –

+0

您可以选择所有数据并隐藏不需要的列。 – Cooper

回答

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); 
    } 
} 

我猜想有一点点想法,你可以在你的思维方向进一步采取这一点。

相关问题