タスクを完了するための実行時間に関して最適なスクリプトを見つけようとしています。特定の既知の列の値を確認する必要があるかなり大きなスプレッドシートがあり、一致する場合に応じてその行が返されます。理想的には、返された行を含む新しいスプレッドシートが必要です。
IDでスプレッドシートを開いてシートと範囲を取得しましたが、特定の列を検索してその値だけでなく行全体を取得する最も効率的な方法がわかりません。
タスクを完了するための実行時間に関して最適なスクリプトを見つけようとしています。特定の既知の列の値を確認する必要があるかなり大きなスプレッドシートがあり、一致する場合に応じてその行が返されます。理想的には、返された行を含む新しいスプレッドシートが必要です。
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)
}