2016-07-27 7 views
1

Ich verwende Query.setQuery in der Google-Visualisierung Abfrage-Skript unten, um diese einfache spreadsheet zu durchsuchen. Das Skript sucht in Spalte A nach einem Namen, der in ein HTML-Eingabefeld eingegeben wurde, vergleicht dann den entsprechenden Job und die Stunden dieser Person (aus anderen Spalten) und gibt diese Daten an HTML-Eingabefelder zurück. (Dank an Foren Mitglied WhiteHat für die Hilfe mit dem!)Durchsuchen einer Tabelle mit Google Visualization-Abfrage - basierend auf mehreren Suchkriterien

google.charts.load('current', { 
 
    callback: function() { 
 
    document.getElementById('Search').addEventListener('click', searchSheet, false); 
 
    searchSheet(); 
 

 
    function searchSheet() { 
 
     searchName = document.getElementById('Name').value; 
 

 
     var queryWORK = new google.visualization.Query('https://docs.google.com/spreadsheet/ccc?key=1HpHMfoEnPgESb2XPVCgb7XyGwRAvrq3EoQj4WHj4vhA&sheet=QUERY'); 
 
     if (searchName !== '') { 
 
     queryWORK.setQuery('select * where A = "' + searchName + '"'); 
 
\t \t 
 
     } 
 

 
\t \t queryWORK.send(function (response) { 
 
     if (response.isError()) { 
 
      console.log('Error in ID Validation Query: ' + response.getMessage() + ' ' + response.getDetailedMessage()); 
 
      return; 
 
     } 
 

 
     var datatable = response.getDataTable(); 
 
     for (var i = 0; i < datatable.getNumberOfColumns(); i++) { 
 
      document.getElementById(datatable.getColumnLabel(i)).value = 
 
      (datatable.getNumberOfRows() > 0) ? datatable.getValue(0, i) : ''; 
 
     } 
 

 
     var chart = new google.visualization.Table(document.getElementById('table_div')); 
 
     chart.draw(datatable); 
 
     }); 
 
    } 
 
    }, 
 
    packages:['table'] 
 
});
div { 
 
    padding: 6px 6px 6px 6px; 
 
}
<script src="https://www.gstatic.com/charts/loader.js"></script> 
 
<div><label for="Name">Enter Name: </label><input id="Name" type="text" value="Bill" /></div> 
 
<div><input id="Search" type="button" value="Search" /></div> 
 
<div><label for="Job">Job: </label><input id="Job" type="text" /></div> 
 
<div><label for="Hours">Hours: </label><input id="Hours" type="text" /></div> 
 
<div id="table_div"></div>

Was ich suche jetzt zu tun ist, ein weiteres Suchkriterium hinzufügen und dann das Spiel zu einem geschickt haben generisches "results" html Eingabefeld. Die Suche muss immer die Zellen in Spalte A und Zeile 1 der Tabelle durchsuchen, um die Übereinstimmung zu finden.

Zum Beispiel, wenn in dem ersten Suchfeld I Janet, und in zweiten Feld eingeben I eingeben Job, würde Ich mag Kochen in dem „Ergebnisse“ Eingabefeld zurückgegeben werden. Oder sagen, ich gebe Adam und Stunden, dann eine Übereinstimmung von 1,5 sollte zurückgegeben werden.

Zelle A1 enthält immer dieselben Daten ("Name"); Allerdings wird es für mich keine Möglichkeit geben, den Inhalt der verbleibenden Zellen in der ersten Zeile vorher zu kennen (B1, C1, D2 ...), da sich diese ändern werden.

Irgendwelche Ideen ??? Dank

Antwort

1

können Sie ein Sternchen verwenden, um alle Spalten wie vor

'select * where A = "' + searchText + '"'

dann verwenden ähnliche Logik zurückzukehren, die angeforderte Spalte

siehe folgende Arbeits Schnipsel zu finden ...

google.charts.load('current', { 
 
    callback: function() { 
 
    document.getElementById('Search').addEventListener('click', searchSheet, false); 
 
    searchSheet(); 
 

 
    function searchSheet() { 
 
     searchText = document.getElementById('Name').value; 
 

 
     var queryWORK = new google.visualization.Query('https://docs.google.com/spreadsheet/ccc?key=1HpHMfoEnPgESb2XPVCgb7XyGwRAvrq3EoQj4WHj4vhA&sheet=QUERY'); 
 
     if (searchText !== '') { 
 
     queryWORK.setQuery('select * where A = "' + searchText + '"'); 
 
     } 
 

 
     queryWORK.send(function (response) { 
 
     if (response.isError()) { 
 
      console.log('Error in ID Validation Query: ' + response.getMessage() + ' ' + response.getDetailedMessage()); 
 
      return; 
 
     } 
 

 
     var datatable = response.getDataTable(); 
 
     for (var i = 0; i < datatable.getNumberOfColumns(); i++) { 
 
      var field = document.getElementById('Field').value; 
 
      if (datatable.getColumnLabel(i) === field) { 
 
      document.getElementById('Result').value = (datatable.getNumberOfRows() > 0) ? datatable.getValue(0, i) : ''; 
 
      } 
 
     } 
 

 
     var chart = new google.visualization.Table(document.getElementById('table_div')); 
 
     chart.draw(datatable); 
 
     }); 
 
    } 
 
    }, 
 
    packages:['table'] 
 
});
div { 
 
    margin: 6px 6px 6px 6px; 
 
}
<script src="https://www.gstatic.com/charts/loader.js"></script> 
 
<div><label for="Name">Enter Name: </label><input id="Name" type="text" value="Bill" /></div> 
 
<div><label for="Field">Field: </label><input id="Field" type="text" value="Job" /></div> 
 
<div><input id="Search" type="button" value="Search" /></div> 
 
<div><label for="Result">Result: </label><input id="Result" type="text" /></div> 
 
<div id="table_div"></div>

+0

Wow! Vielen Dank WhiteHat ... schon wieder! Ich habe gestern mehrere Stunden damit verbracht, das zur Arbeit zu bringen. Kann ich dir ein Bier kaufen? – firenemus

+0

Prost! froh zu helfen, jederzeit ... – WhiteHat