我创建了一个API,该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()));
}
答案 0 :(得分: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);
}
此脚本中唯一需要注意的是它将值写入表格而不是公式。