私は、タスクを完了するためのランタイムの観点から最適なスクリプトを見つけようとしています。特定の既知の列の値を確認する必要があるかなり大きなスプレッドシートがあり、一致ケースに応じてその行が返されます。理想的には、返された行を含む新しいスプレッドシートが欲しいです。
IDでスプレッドシートを開き、シートと範囲を取得しましたが、特定の列を検索してその値だけでなく行全体を取得する最も効率的な方法はわかりません。
以下のコードを使用して、特定の列を検索できます。コードは自明です。
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [ {name: "Search", functionName: "onSearch"} ];
ss.addMenu("Commands", menuEntries);
}
function onSearch()
{
var searchString = "Test11";
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SheetName");
var column =4; //column Index
var columnValues = sheet.getRange(2, column, sheet.getLastRow()).getValues(); //1st is header row
var searchResult = columnValues.findIndex(searchString); //Row Index - 2
if(searchResult != -1)
{
//searchResult + 2 is row index.
SpreadsheetApp.getActiveSpreadsheet().setActiveRange(sheet.getRange(searchResult + 2, 1))
}
}
Array.prototype.findIndex = function(search){
if(search == "") return false;
for (var i=0; i<this.length; i++)
if (this[i] == search) return i;
return -1;
}
Google Apps Script textFinder クラスを使用することもできます。
この関数例は、文字列を検索し、アラートダイアログに最初に出現した行を表示します。
function searchString(){
var sheet = SpreadsheetApp.getActiveSheet()
var search_string = "dog"
var textFinder = sheet.createTextFinder(search_string)
var search_row = textFinder.findNext().getRow()
var ui = SpreadsheetApp.getUi();
ui.alert("search row: " + search_row)
}