【问题标题】:How to return each individual row in the results?如何返回结果中的每一行?
【发布时间】:2019-07-07 06:14:27
【问题描述】:

我创建了一个 API,它在电子表格中的表格 2 中搜索关键字并返回找到关键字的单元格的行号。我想将表格 2 中的所有行复制并粘贴到表 1. 我无法让脚本将它们全部复制和粘贴。

function executeSearch() {
  //establishing search sheet
  var SSS = SpreadsheetApp.openById('ID');
  var SS = SSS.getSheetByName('Sheet1');
  var searchTerm = SS.getRange('B3').getValue();
  //establishing the data sheet
  var DS = SSS.getSheetByName('Sheet2');


  var completeSearch = DS.createTextFinder(searchTerm).findAll();
  for (var i = 0; i < completeSearch.length; i++) {
    var range = completeSearch[i];    
    var resultsCells = range.getA1Notation(); //get the cell location of the search data cell
    var row = range.getRow(); //get the rows that the search data is in

DS.getRange(row, 1, 1, DS.getMaxColumns()).copyTo(SS.getRange(8, 1, 1, DS.getMaxColumns()));

  }

【问题讨论】:

  • 您已将所有行复制到 SS 的同一(第 8 行)行中(参见最后一行代码)。这是一个错误吗?
  • @АлександрЕрмолин 哦,是的!如果有意义的话,我将如何定义范围以便将每一行(其中包含搜索结果)复制到行中?我遇到的主要问题是它不会复制所有结果,即使有多行也是如此。它总是只复制原始数据表中的一行。行变量返回如下答案:[19-07-07 00:43:30:639 PDT] 3.0 [19-07-07 00:43:30:642 PDT] 9.0 [19-07-07 00:43:30:645 PDT] 13.0
  • @АлександрЕрмолин 这些结果是行。我需要将每一行按数字复制到另一张纸中。我不知道该怎么做。

标签: search google-apps-script google-sheets google-sheets-api


【解决方案1】:

您的代码每次都将数据复制到同一行:

DS.getRange(row, 1, 1, DS.getMaxColumns()).copyTo(SS.getRange(8, 1, 1, DS.getMaxColumns()));

要获取将数据写入新行的代码,您可以将其更改为:

DS.getRange(row, 1, 1, DS.getMaxColumns()).copyTo(SS.getRange(8 + i, 1, 1, DS.getMaxColumns()));

但是当您有大量结果时,这效率不高。你反复调用工作表来写每一行。

首先将所有搜索结果写入数组会更有效。然后只需调用一次工作表即可将所有数据一次性写入行。

function executeSearch() {

  //establishing search sheet
  var SSS = SpreadsheetApp.openById('ID');
  var SS = SSS.getSheetByName('Sheet1');
  var searchTerm = SS.getRange('B3').getValue();

  //establishing the data sheet
  var DS = SSS.getSheetByName('Sheet2');  

  var completeSearch = DS.createTextFinder(searchTerm).findAll();
  var searchResults = []; // Create an array to store the values of the search results

  for (var i = 0; i < completeSearch.length; i++) {
    var range = completeSearch[i];
    var row = range.getRow(); //get the rows that the search data is in
    var values = DS.getRange(row, 1, 1, DS.getMaxColumns()).getValues();
    searchResults.push(values[0]);
  }

  SS.getRange(8, 1, searchResults.length, searchResults[0].length).setValues(searchResults);
}

在这个脚本中唯一需要注意的是它会将值写入工作表而不是公式。

【讨论】:

  • 这行得通!太感谢了。这花了我一辈子!
猜你喜欢
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 2022-11-10
相关资源
最近更新 更多