it-swarm.com.de

Google Spreadsheet; Funktion zum Durchsuchen eines Blatts nach Zeichenfolge und Rückgabewert der nächsten Spalte

Folgendes habe ich bisher. es wird:

  1. Suche nach Schlüsselwort in meinem anderen Blatt (JSON)
  2. Wenn das Schlüsselwort (Modname) gefunden wird, wird die Zeile # zurückgegeben.

Das Schlüsselwort befindet sich in der Spalte A. Ich möchte, dass eine Funktion den Wert in der Spalte B derselben Zeile zurückgibt. = Wie mache ich das?

function onSearch2(modname)
{
    var searchString = modname;
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("JSON164"); 
    var column =1; //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))
        return searchResult+2
    }
}
2
Paul Duncan

Ich arbeitete auch an einer Lösung.

Code

function onSearch1(searchString) {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("JSON164");
  var values = sh.getDataRange().getValues();

  for(var i=0, iLen=values.length; i<iLen; i++) {
    if(values[i][0] == searchString) {
      return values[i][1];
    }
  }     
}

Erklärt

Der Wert var ruft alle Werte auf einmal ab. Das einzelne Ergebnis var erfasst den ersten im Bereich gefundenen Index. Danach wird das Ergebnis der nebenstehenden Spalte angezeigt, analog zu Werten [i] [0] .

Verwendungszweck

=onSearch1("test")

Hinweis

Die Funktion findIndex ist in Google Apps Script nicht vorhanden. Wenn Sie sie trennen möchten, verwenden Sie diesen Code:

function onSearch2(searchString) {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("JSON164");
  var values = sh.getDataRange().getValues();
  var i = findIndex(values, searchString);

  return values[i][1]; 
}

function findIndex(values, searchString) {
  for(var i=0, iLen=values.length; i<iLen; i++) {
    if(values[i][0] == searchString) {
      return i;
    }
  }
}

Beispiel

Ich habe eine Beispieldatei für Sie erstellt: findIndex

3

Wenn ich Ihre Frage richtig verstanden habe, möchten Sie eine Spalte nach einer bestimmten Zeichenfolge durchsuchen und, falls gefunden, einen Wert aus einer anderen Spalte in derselben Zeile zurückgeben.

Hier ist mein Vorschlag:

var SPREADSHEET_NAME = "Sheet1";
var SEARCH_COL_IDX = 1;
var RETURN_COL_IDX = 0;

function searchStr(str) {
  var values = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SPREADSHEET_NAME).getDataRange().getValues();
  for (var i = 0; i < values.length; i++) {
    var row = values[i];
    if (row[SEARCH_COL_IDX] == str) {
      return row[RETURN_COL_IDX];
    }
  }
}

Um diese Funktion von Ihrem Blatt aus zu verwenden, verwenden Sie einfach die Formel =searchStr(search term). Ich habe eine Beispieltabelle erstellt hier .

Die Konstanten SEARCH_COL_IDX und RETURN_COL_IDX können für die Suchfunktion als Parameter festgelegt werden, um sie allgemeiner zu gestalten.

1
Vidar S. Ramdal