【スプレッドシート】
A列からE列まで2000行のデータがあります。
A列:2000行まで1~2000の数値が順に入力されています。
B列:2000行まで全てにバラバラの値が入っています。
C列:2000行まで1~2000の数値がランダムに入力されています。
D列:2000行まで1~2000の数値がランダムに入力されています。
E列:2000行まで全てにバラバラの値が入っています。
(フォーム表示)
1.Google apps ScriptにアクセスしdoGet()で別途作成したフォームを表示させます。
2.フォームにはテキストボックスが2つあります。テキストボックス1とテキストボックス2とします。
【やりたいこと】
(1つ目)
1.テキストボックス1に100と入力する→スプレッドシートのA列で100のある行を検索→同じ行にあるB列の値を
テキストボックス1の下に表示させたい。
(2つ目)
1.テキストボックス2に200と入力する。
2.スプレッドシートで「C列100(テキストボックス1に入力されている値)」かつ
「D列200(テキストボックス2に入力されている値)」と一致する行を検索
3.同じ行にあるE列の値をテキストボックス2の下に表示させたい。
※(2つ目)について、C列D列の数値がランダムなら検索ヒット確率低くないか?と思われるかもしれませんが
実際はC~E列は数万行あるのでかならずヒットするようになっています。
全2000行前提でご教授いただければ助かります。
【進捗】
以下のコードで上記1つ目のやりたいことは達成できました。2つ目の検索方法がわからない状態です。(検索実行時間の短縮などについてもご見解いただければ助かります)
ご教授いただければ助かります。
1【1つ目のコード】**正常に動作します。** 2//main.gs 3 4function doGet() { 5 return HtmlService.createTemplateFromFile('index').evaluate; 6} 7 8function kensaku(e) { 9//HTMLからうまく取得できなければ"undefined"を返す 10if (e === undefined) 11{ 12e="undefined"; 13return e; 14} 15//HTMLからうまく取得できればスプレッドシートを検索し、検索結果を返す 16else{ 17 var text = e; 18 var datasheet = SpreadsheetApp.openById("スプレッドシートのID").getSheetByName("シート名"); 19 var range = datasheet.getRange("A:A").getValues(); 20 var lastRow = range.filter(String).length; 21 var loginData = datasheet.getRange(1, 1, lastRow, 5).getValues(); //1~lastRow行目、5列分を二次元配列として取得 22 loginData = loginData.filter(function(v) { 23 return v[0] == text; 24 }); 25try{ 26 var seikou = loginData[0][1]; 27 return seikou; 28 29 }catch(e){ 30 seikou = "該当なし"; 31 return seikou; 32 } 33} 34} 35 36 37//index.html 38 39//略 401つ目 41<input type="number" id="input"> 42 43<!--このボタンを押すと下のスクリプト動作--> 44<input type="button" onclick="test()" value="ここを押すとアウトプット"> 45 46<!--表示成功しました--> 47<div id="output"></div> 48 49<script> 50 function test() { 51 var a= document.getElementById("input").value; 52 google.script.run.withSuccessHandler(result).kensaku(a); 53 function result(data) { 54 document.getElementById("output").innerHTML = data; 55 } 56</script> 57//略
1【2つ目のコード】とりあえずここまでできてます。。 2 3//main.gs 4function doGet() { 5 return HtmlService.createTemplateFromFile('index').evaluate; 6} 7 8function kensakus(a,b) { 9if (a=== undefined) 10{ 11b="undefined"; 12return b; 13} 14else if (b=== undefined) 15{ 16b="undefined"; 17return b; 18} 19else{ 20 var texta = a; 21 var textb = b; 22 var datasheet = SpreadsheetApp.openById("スプレッドシートのID").getSheetByName("シート名"); 23 var range = datasheet.getRange("C:C").getValues(); //一番長いC列の最終行取得 24 var lastRow = range.filter(String).length; 25 var loginData = datasheet.getRange(1, 3, lastRow, 5).getValues(); //1~lastRow行目、3~5列分を二次元配列として取得 26 loginData = loginData.filter( 27 function(v) {return v[?] == ??;} ** //ここの検索方法がわかりません。** 28 ); 29 try{ 30 var seikou = loginData[?][?]; **//どう記述したらいいのかわかりません。** 31 return seikou; 32 }catch(e){ 33 seikou = "該当なし"; 34 return seikou; 35 } 36} 37} 38 39//index.html 40//略 412つのテキストボックス 42<input type="number" id="input"> 43<input type="number" id="inputs"> 44 45<!--このボタンを押すと下のスクリプト動作--> 46<input type="button" onclick="test()" value="ここを押すとアウトプット"> 47 48<!--ここで検索結果表示したい。--> 49<div id="outputs"></div> 50<script> 51 function test() { 52 var a= document.getElementById("input").value; 53 var b= document.getElementById("inputs").value; 54 google.script.run.withSuccessHandler(results).kensakus(a,b); 55 function results(data) { 56 document.getElementById("outputs").innerHTML = data; 57 } 58</script> 59//略 60```
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。