Javascript Google应用程序脚本使用特定列选择特定行
我正试图找出如何使用谷歌应用程序脚本只提取特定的行和列。=查询不是要使用的选项。需要保留脚本中的所有逻辑-我的实际数据集相当大。来说明我要解决的问题。我有一个小的测试数据表。从中我只需要第2、3、5列(从零开始的索引),并且只需要带有“fur”的行 谢谢你的帮助。我真的很惊讶没有发现任何这样的例子。每个解决方案都使用工作表上的=查询。编辑: 如果使用此行推送到输出,则不需要在Javascript Google应用程序脚本使用特定列选择特定行,javascript,google-apps-script,Javascript,Google Apps Script,我正试图找出如何使用谷歌应用程序脚本只提取特定的行和列。=查询不是要使用的选项。需要保留脚本中的所有逻辑-我的实际数据集相当大。来说明我要解决的问题。我有一个小的测试数据表。从中我只需要第2、3、5列(从零开始的索引),并且只需要带有“fur”的行 谢谢你的帮助。我真的很惊讶没有发现任何这样的例子。每个解决方案都使用工作表上的=查询。编辑: 如果使用此行推送到输出,则不需要在output周围使用[]- output.push( [values[n][2], values[n][3], value
output
周围使用[]
-
output.push( [values[n][2], values[n][3], values[n][5]]);
要按行设置值,数据必须采用此格式-
[ row,
row ]
或者
无法将数组转换为对象[]【】。
范围和值格式不匹配时显示错误
试试这条线-
targetTab.getRange(1, 1, output.length, columns.length).setValues([output]);
报告生成器
我猜您希望使用此函数从同一数据集生成不同的报告。所以我可以试试这样的东西:
职能:
function testFour(t4Obj) {
var ss=SpreadsheetApp.openById(t4Obj.ssId);
var srcsh=ss.getSheetByName(t4Obj.srcShName);
var dessh=ss.getSheetByName(t4Obj.desShName);
var colA=String(t4Obj.zbcols).split('~~~');
var tstCol=Number(t4Obj.zbtstCol);
var tstVal=t4Obj.tstVal;
var srcrg=srchsh.getDataRange();
var srcvA=srcrg.getValues();
var desvA=[];
for (var i=0;i<srcvA.length;i++) {
var tA=[];
if (srcVa[i][tstCol]==tstVal) {
for (var j=0;j<colA.length;j++) {
tA.push(colA[j]);
}
desvA.push(tA);
}
}
dessh.getRange(1, 1, desvA.length, desvA[0].length).setValues(desvA);
}
根据库珀的上述建议,这是我如何使其发挥作用的:
function testFourNew(sheetID, fromTabName, toTabName) {
var sourceTab = SpreadsheetApp.openById(sheetID).getSheetByName(fromTabName);
var targetTab = SpreadsheetApp.openById(sheetID).getSheetByName(toTabName);
var srcrg = sourceTab.getDataRange();
var srcvA = srcrg.getValues();
var desvA=[];
// var columns = [2,3,5]; //only want these columns
var columns = String("2,3,5").split(','); //only want these columns
var tstVal = "fur";
var tstCol = 4;
for (var i=0;i<srcvA.length;i++) {
var tA=[];
if (srcvA[i][tstCol] ==tstVal) {
for (var j=0;j<columns.length;j++) {
//Logger.log(srcvA[i][columns[j]]);
tA.push(srcvA[i][columns[j]]);
}
desvA.push(tA);
}
}
targetTab.getRange(1, 1, desvA.length, desvA[0].length).setValues(desvA);
}
函数testFourNew(sheetID、fromTabName、toTabName){
var sourceTab=SpreadsheetApp.openById(sheetID).getSheetByName(fromTabName);
var targetTab=SpreadsheetApp.openById(sheetID).getSheetByName(toTabName);
var srcrg=sourceTab.getDataRange();
var srcvA=srcrg.getValues();
var desvA=[];
//var columns=[2,3,5];//只需要这些列
var columns=String(“2,3,5”).split(“,”);//只需要这些列
var tstVal=“毛发”;
var-tstCol=4;
对于返回不同错误的(var i=0;iInteresting):数据中的行数与范围中的行数不匹配。数据有1,但范围有6.Hmmm,我希望有两行。请记住,行是数组。工作表中的数据是数组的数组。[[]、[]、[]、[]、[]、[]、[]…]哪种代码给出了错误?中的代码“testFour”函数,我把它放在文章的主要部分。它在上面指出的行中显示了错误,并说明了错误。您可以查看下面的代码。我使用了一个中间值来收集术语,然后将整个数组推送到输出数组中。数组需要看起来像[[列项目],[列项目],[列项目]…]其中每个内部数组都是一行。不要回答问题中的问题。这不是答案所在的位置。这非常有用。我认为我根据您共享的内容计算出了数组和循环。我也喜欢您共享的表的想法。现在我觉得我已经掌握了数组位,我将进一步探讨这一点。
[ [1,2,3],
[4,5,6] ]
targetTab.getRange(1, 1, output.length, columns.length).setValues([output]);
function testFour(t4Obj) {
var ss=SpreadsheetApp.openById(t4Obj.ssId);
var srcsh=ss.getSheetByName(t4Obj.srcShName);
var dessh=ss.getSheetByName(t4Obj.desShName);
var colA=String(t4Obj.zbcols).split('~~~');
var tstCol=Number(t4Obj.zbtstCol);
var tstVal=t4Obj.tstVal;
var srcrg=srchsh.getDataRange();
var srcvA=srcrg.getValues();
var desvA=[];
for (var i=0;i<srcvA.length;i++) {
var tA=[];
if (srcVa[i][tstCol]==tstVal) {
for (var j=0;j<colA.length;j++) {
tA.push(colA[j]);
}
desvA.push(tA);
}
}
dessh.getRange(1, 1, desvA.length, desvA[0].length).setValues(desvA);
}
function makeArray() {
var A=[[1,6,11,16,21],[2,7,12,17,22],[3,8,13,18,23],[4,9,14,19,24],[5,10,15,20,25]];
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getRange(5,5,5,5);//could be this way
//var rg=sh.getRange(5,5,A.length,A[0].length);//or in most programs this way
rg.setValues(A);
}
function testFourNew(sheetID, fromTabName, toTabName) {
var sourceTab = SpreadsheetApp.openById(sheetID).getSheetByName(fromTabName);
var targetTab = SpreadsheetApp.openById(sheetID).getSheetByName(toTabName);
var srcrg = sourceTab.getDataRange();
var srcvA = srcrg.getValues();
var desvA=[];
// var columns = [2,3,5]; //only want these columns
var columns = String("2,3,5").split(','); //only want these columns
var tstVal = "fur";
var tstCol = 4;
for (var i=0;i<srcvA.length;i++) {
var tA=[];
if (srcvA[i][tstCol] ==tstVal) {
for (var j=0;j<columns.length;j++) {
//Logger.log(srcvA[i][columns[j]]);
tA.push(srcvA[i][columns[j]]);
}
desvA.push(tA);
}
}
targetTab.getRange(1, 1, desvA.length, desvA[0].length).setValues(desvA);
}