我正在尝试遍历我的Google工作表中的整行,并将一些数据从一个工作表复制到另一个工作表。随着时间的推移,列表会变得更长。
更具体地说:如果B列中的输入等于“蓝色”,则将A列和C列中的值复制到另一张表中。 对所有列执行此操作直到列结束。
链接到我的电子表格:https://docs.google.com/spreadsheets/d/1xnLygpuJnpDfnF6LdR41gN74gWy8mxhVnQJ7i3hv1NA/edit?usp=sharing
任何评论,提示或帮助都受到高度赞赏。
问候!
答案 0 :(得分:3)
您有一个名为“List”的输入表,我将输出表命名为“Output”。这是代码。
function condCopy()
{
var s = SpreadsheetApp.getActiveSpreadsheet();
var sht = s.getSheetByName('List')
var drng = sht.getDataRange();
var rng = sht.getRange(2,1, drng.getLastRow()-1,drng.getLastColumn());
var rngA = rng.getValues();//Array of input values
var rngB = [];//Array where values that past the condition will go
var b = 0;//Output iterator
for(var i = 0; i < rngA.length; i++)
{
if(rngA[i][1] == 'blue')
{
rngB[b]=[];//Initial new array
rngB[b].push(rngA[i][0],rngA[i][2]);
b++;
}
}
var shtout = s.getSheetByName('Output');
var outrng = shtout.getRange(2,1,rngB.length,2);//Make the output range the same size as the output array
outrng.setValues(rngB);
}
答案 1 :(得分:1)
您有2个选项。第一种方法是使用Google表格中的标准query()函数来获取值。这里的缺点是它只是价值的参考。所以你不能对它们进行重新排序等。要使用它,将它放在单元格A1中,它将拉出标题并从A列和C列中检索值:
=QUERY(A:C, "select A, C where B = 'blue'", 1)
对于Google Apps脚本答案: 这将遍历您的列表表格,对于列B 蓝色的每一行,它会将A列和C列中的值保存到新表格的A和B列:
function doIt(){
var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet4");
var lastRow = activeSheet.getLastRow();
var lastCol = activeSheet.getLastColumn();
var targetValues = [];
var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("List");
var lastSourceRow = sourceSheet.getLastRow();
var lastSourceCol = sourceSheet.getLastColumn();
var sourceRange = sourceSheet.getRange(1, 1, lastSourceRow, lastSourceCol);
var sourceData = sourceRange.getValues();
var activeRow = 0;
//Loop through every retrieved row from the Source
for (row in sourceData) {
//IF Column B in this row has 'blue', then work on it.
if (sourceData[row][1] === 'blue') {
//Save it ta a temporary variable
var tempvalue = [sourceData[row][0], sourceData[row][2]];
//then push that into the variables which holds all the new values to be returned
targetValues.push(tempvalue);
}
}
//Save the new range to the appropriate sheet starting at the last empty row
activeSheet.getRange(lastRow + 1, 1 , targetValues.length, 2).setValues(targetValues);
}
当然,你可以通过替换2行来传递值来测试函数。第一,定义函数:
function doIt(testingvar){
传递一个名为testingvar的变量,以及用传递的变量替换硬编码测试的测试行:
if (sourceData[row][1] === testingvar) {