Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Google应用程序脚本使用特定列选择特定行_Javascript_Google Apps Script - Fatal编程技术网

Javascript Google应用程序脚本使用特定列选择特定行

Javascript Google应用程序脚本使用特定列选择特定行,javascript,google-apps-script,Javascript,Google Apps Script,我正试图找出如何使用谷歌应用程序脚本只提取特定的行和列。=查询不是要使用的选项。需要保留脚本中的所有逻辑-我的实际数据集相当大。来说明我要解决的问题。我有一个小的测试数据表。从中我只需要第2、3、5列(从零开始的索引),并且只需要带有“fur”的行 谢谢你的帮助。我真的很惊讶没有发现任何这样的例子。每个解决方案都使用工作表上的=查询。编辑: 如果使用此行推送到输出,则不需要在output周围使用[]- output.push( [values[n][2], values[n][3], value

我正试图找出如何使用谷歌应用程序脚本只提取特定的行和列。=查询不是要使用的选项。需要保留脚本中的所有逻辑-我的实际数据集相当大。来说明我要解决的问题。我有一个小的测试数据表。从中我只需要第2、3、5列(从零开始的索引),并且只需要带有“fur”的行

谢谢你的帮助。我真的很惊讶没有发现任何这样的例子。每个解决方案都使用工作表上的=查询。

编辑:

如果使用此行推送到输出,则不需要在
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);
}