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

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

新規登録して質問してみよう
ただいま回答率
85.31%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

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

Q&A

1回答

81閲覧

Google Apps Script:検索はヒットするがHTML側で結果が表示されない(nullになる)

kei202222

総合スコア0

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

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

0グッド

1クリップ

投稿2025/04/18 03:52

編集2025/04/18 03:57

Google Apps Script(GAS)とHTMLを使って、スプレッドシート「予約管理」の情報を検索・表示する仕組みを作っています。


📌 現在の状況

  • スプレッドシートの「新規予約」シートを対象にしています(※下記にスクリーンショット添付予定)
  • チェックイン日やコードなどで検索できるようにしています
  • GAS側の searchNewReservations()testSearchDirect() で実行すると、ログにはヒット件数も正しく出ます
  • しかし HTML 側で検索を実行すると、データが表示されず null[] が返ってきてしまいます

🧪 試したこと

  • parseDate() の書き換え(Date型か文字列かなどをいろいろ試しました)
  • チェックイン・チェックアウト列のセル書式を Google スプレッドシートで「日付」に明示
  • GAS内の return 値が [] ではないことを Logger で確認済み
  • JS 側の console.log(results) にも null[] が表示されてしまいます
  • 条件をゆるめたり、パラメータを空にしても変化なし

🤔 知りたいこと

  • GASの関数ではヒットしているのに、なぜ HTML 側に結果が渡ってこないのでしょうか?
  • resultsnull または [] になる原因として、他に考えられる可能性はありますか?
  • JS側で google.script.run.withSuccessHandler(...) を使っていても、このような症状になる要因があれば教えていただきたいです

🧩 使用中のコード

code.gs

javascript

1// code.gs 2function doGet() { 3 return HtmlService.createHtmlOutputFromFile('search'); 4} 5 6function searchNewReservations(params = {}) { 7 try { 8 const sheet = SpreadsheetApp.openById("188gf3L00CMpHWWVa1HHJxoHbKB6sYTorS0dKR-_Rt8s") 9 .getSheetByName("新規予約"); 10 const data = sheet.getDataRange().getValues(); 11 const results = []; 12 13 const parseDate = d => { 14 if (!d) return null; 15 if (Object.prototype.toString.call(d) === "[object Date]") return d; 16 return new Date(d.toString().replace(/-/g, "/")); 17 }; 18 19 const checkinStart = parseDate(params.checkinStart); 20 const checkinEnd = parseDate(params.checkinEnd); 21 const checkoutStart = parseDate(params.checkoutStart); 22 const checkoutEnd = parseDate(params.checkoutEnd); 23 24 if (checkinStart) checkinStart.setHours(0, 0, 0, 0); 25 if (checkinEnd) checkinEnd.setHours(0, 0, 0, 0); 26 if (checkoutStart) checkoutStart.setHours(0, 0, 0, 0); 27 if (checkoutEnd) checkoutEnd.setHours(0, 0, 0, 0); 28 29 for (let i = 1; i < data.length; i++) { 30 const row = data[i]; 31 const property = row[1]; 32 const code = row[2]; 33 const checkin = parseDate(row[3]); 34 const checkout = parseDate(row[4]); 35 36 if (!checkin || !checkout) continue; 37 38 checkin.setHours(0, 0, 0, 0); 39 checkout.setHours(0, 0, 0, 0); 40 41 const match = 42 (!params.property || property === params.property) && 43 (!params.code || code === params.code) && 44 (!checkinStart || checkin >= checkinStart) && 45 (!checkinEnd || checkin <= checkinEnd) && 46 (!checkoutStart || checkout >= checkoutStart) && 47 (!checkoutEnd || checkout <= checkoutEnd); 48 49 if (match) { 50 results.push({ rowIndex: i + 1, row }); 51 } 52 } 53 54 return results; 55 56 } catch (error) { 57 Logger.log("❌ searchNewReservationsでエラー:"); 58 Logger.log(error.message); 59 Logger.log(error.stack); 60 return []; 61 } 62} 63 64### `search.html` 65 66```html 67// search.html 68 69<script> 70 function searchReservations() { 71 const checkinStart = document.getElementById('checkinStart').value; 72 const checkinEnd = document.getElementById('checkinEnd').value; 73 74 const params = { 75 checkinStart, 76 checkinEnd, 77 }; 78 79 google.script.run 80 .withSuccessHandler(results => { 81 console.log("📦 JSで受け取った結果:", results); // ← nullや[]になる 82 renderTable(results); 83 }) 84 .searchNewReservations(params); 85 } 86 87 function renderTable(results) { 88 const table = document.getElementById('results'); 89 table.innerHTML = ''; 90 91 if (!results || results.length === 0) { 92 table.innerHTML = '<tr><td>該当データがありません</td></tr>'; 93 return; 94 } 95 96 results.forEach(({ row }) => { 97 const tr = document.createElement('tr'); 98 row.forEach(cell => { 99 const td = document.createElement('td'); 100 td.textContent = cell; 101 tr.appendChild(td); 102 }); 103 table.appendChild(tr); 104 }); 105 } 106</script> 107

イメージ説明

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

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

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

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

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

guest

回答1

0

HTML サービス: サーバー機能と通信するに書いてあるパラメータと戻り値

有効なパラメータと戻り値は、Number、Boolean、String、null などの JavaScript プリミティブと、プリミティブ、オブジェクト、配列で構成される JavaScript オブジェクトと配列です。ページ内の form 要素もパラメータとして使用できますが、関数の唯一のパラメータである必要があります。また、戻り値として使用することはできません。Date、Function、form 以外の DOM 要素、またはオブジェクトや配列内の禁止されている型などの他の禁止されている型を渡そうとすると、リクエストは失敗します。循環参照を作成するオブジェクトも失敗し、配列内の未定義のフィールドは null になります。

とあります。
返そうとしているものに有効なもの以外のものが含まれているのではないでしょうか。
もしそうなのであればJSON化して文字列として受け取るとかしてみてはどうでしょうか。

投稿2025/04/18 04:43

YAmaGNZ

総合スコア10542

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問