質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

4531閲覧

gas、html間の配列データの受け渡しと格納

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/01/22 11:52

編集2019/01/22 13:50

前提・実現したいこと

google apps scriptを使って、html内で値を指定し、
データベースとしたスプレッドシートからその値を含む行データを検索し、
htmlのテーブルに反映したい。

発生している問題・エラーメッセージ

二次元配列に上手く格納できない

該当のソースコード

code.gs

function doGet() {
var html = HtmlService.createTemplateFromFile('index');
return html.evaluate();
}

function SelectData( form ) {
var ss = SpreadsheetApp.openById('シートID'); //スプレッド取得
var sheet = ss.getSheetByName("データベース"); //シート取得
var lastRow=sheet.getLastRow();

Logger.log(form.selectindex);

var j=0;
var values = [];

for(var i = 2;i <= lastRow;i++){
var val = sheet.getRange(i, 8).getValue();

if ( val == form.selectindex ) { values[j]=sheet.getRange(i,1,1,8).getValues(); j++; }

}

Logger.log(values);

return values;
}

index.html

<!DOCTYPE html> <html> <head> <title>スプレッド読込みテスト</title> <!--クライアントスクリプト--> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script> $(function() {  $('#edit input[type="submit"]').click(function(e) { e.preventDefault(); google.script.run.withSuccessHandler(dispLoginData).SelectData(this.parentNode); }); });

function dispLoginData(Data) { // スプレッドシートから取得した情報を元にテーブルを構成
var td = '';
for (var i=0; i<Data.length; i++) {
td +='<tr>';
for(var j=0; j<Data[0].length; j++){
td += '<td>' + Data[i][j] + '</td>';
}
td +='</tr>'
}
window.confirm(td);
$('#loginTr').html(td);
}
</script>

</head> <body> <div id="edit">
<form name="form1"> タスク:<select id="selectindex" name="selectindex"> <option value="A">A</option> <option value="B">B</option> <option value="C">C</option> </select> <input id="submitbutton" name="submitbutton" type="submit" value="内容表示"> </form> <br> <table class="table table-bordered table-striped"> <tr> <th>受注番号</th> <th>ID</th> <th>依頼者名</th> <th>URL</th> <th>〒</th> <th>住所</th> <th>電話番号</th> <th>タスク</th> </tr> <tr id="loginTr"> </tr> </table>
</div> </body> </html>

試したこと

コード.gsの二次元配列へ格納できるようにしたいけど、
色々試してみたけど出来ませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/22 12:17

”上手く格納できない”とありますが、具体的に言うとどうなるのでしょうか? 理想は〜〜〜〜という値が入っていて欲しいが、実際には〜〜〜〜という値が入るみたいな記述だと分かりやすいです。
退会済みユーザー

退会済みユーザー

2019/01/22 12:34

NETACHILさん、投稿ありがとうございます! 抜けていました、すみません。 htmlに反映するとテーブルの項目の一番左側の欄にすべての値が入ってしまいます。 受注番号      | ID | 依頼者名 1,112255, 東京一郎 |    | ↑のような感じです。 受注番号| ID  | 依頼者名 1    |112255| 東京一郎 ↑このようにしたいです! スプレッドシート内ではこの理想にしたい形で入っており、 タスクという項目をもつ行が複数あり、それをすべて表示させたいです。
退会済みユーザー

退会済みユーザー

2019/01/22 12:45

関数SelectData内で実行しているLogger.log(values);のログが見たいです。
退会済みユーザー

退会済みユーザー

2019/01/22 13:03

1,112255,東京一郎,https://aaa.com,123-4567,◯◯県××市△△町1-2-3,090-9999-8888,A です。
退会済みユーザー

退会済みユーザー

2019/01/22 13:10

二次元配列になっていないということですか? 二次元配列ならこんな形でログに出ます。[[A1,B1,C1], [A2,B2,C2], [A3,B3,C3]]
退会済みユーザー

退会済みユーザー

2019/01/22 13:12

そうです。 伝えるのに手間がかかってすみません。 二次元配列で格納したいのですが、そうはならないというところです。
退会済みユーザー

退会済みユーザー

2019/01/22 13:29

現状、valuesは三次元配列になっていませんか?[[[A,B,C.......]]]
退会済みユーザー

退会済みユーザー

2019/01/22 13:52

すみません、指摘していただいた.pushなんですが下記が実際動いていたものでした。 values[j]=sheet.getRange(i,1,1,8).getValues(); で下記が今のLogger.log(values);のログです。 [19-01-22 22:51:22:564 JST] [[[1.0, 112255.0, 東京一郎, https://aaa.com, 123-4567, ◯◯県××市△△町1-2-3, 090-9999-8888, A]], [[2.0, 22585.0, 大阪次郎, https://bbb.co.jp, 222-3333, ああ県いい市うう町1-2-3, 090-1111-2222, A]]]
退会済みユーザー

退会済みユーザー

2019/01/22 13:57

一度、sheet.getRange(i,1,1,8).getValues()をログ出力してみてください。 var x = sheet.getRange(i,1,1,8).getValues(); Logger.log(x); どう修正すればいいか分かるかと思います。
退会済みユーザー

退会済みユーザー

2019/01/22 15:01

if ( val == form.selectindex ) { values=sheet.getRange(i,1,1,8).getValues(); j++; } if分のvalues[j]にして、二次元配列にすることはできるのですが、 が、これでは一つの行しか入れられません。 複数行格納するのは可能なのでしょうか?
退会済みユーザー

退会済みユーザー

2019/01/22 15:05

xをログ出力すると[[1.0, 112255.0, 東京一郎, https://aaa.com, 123-4567, ◯◯県××市△△町1-2-3, 090-9999-8888, A]]が表示されると思います。 欲しいのは[1.0, 112255.0, 東京一郎, https://aaa.com, 123-4567, ◯◯県××市△△町1-2-3, 090-9999-8888, A]だと思うので x[0]を代入すれば上手くいくと思います。
退会済みユーザー

退会済みユーザー

2019/01/22 16:50

できました! つたない質問からここまで導いてくださり本当にありがとうございます。 ここ数日ずっとつまっていたところで、それがNETACHILさんのお陰で進んでとても嬉しいです。 ありがとうございました。
退会済みユーザー

退会済みユーザー

2019/01/22 16:59

了解です。その内容で回答して、自己解決ボタンを押してください。 (この質問をクローズしないと他の回答者がこの質問に取り組むことになるので)
guest

回答2

0

ベストアンサー

できました!
つたない質問からここまで導いてくださり本当にありがとうございます。
ここ数日ずっとつまっていたところで、それがNETACHILさんのお陰で進んでとても嬉しいです。
ありがとうございました。

投稿2019/01/26 03:42

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

H列がマッチしたときに1x8セルの表をvaluesに代入してるから、表示側で

javascript

1for(var j=0; j<8; j++){ 2 td += '<td>' + Data[i][0][j] + '</td>'; 3}

こうかな?

投稿2019/01/22 23:52

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問