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

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

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

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

Q&A

1回答

1497閲覧

スプレッドシート内の情報をGASを使ってHTMLに組み込みたい

ppppp_123123

総合スコア1

Google Apps Script

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

0グッド

0クリップ

投稿2022/07/01 19:11

前提

googleスプレッドシートで編集したものをGoogle Apps Scriptを通してHTML(テキストファイル)に書き出したい。
そのため、下記サイトのコードを参考にした。
https://www.terakoya.work/google-spread-sheet-html-template-output-save/

実現したいこと

カテゴリ毎にデータが複数存在している状態で
各カテゴリ毎に、取得するデータ範囲を指定し、データが入っている分だけ要素を繰り返しHTMLに書き出したい。
各カテゴリのデータは変動するため、切り分けたい。

(例)
【スプレッドシート:シート名(商品DB)】

ABC
画像URL1タイトル1説明文1
画像URL2タイトル2説明文2
   
   
   
画像URL1タイトル1説明文1
画像URL2タイトル2説明文2
画像URL3タイトル3説明文3
   
   

【HTML:ファイル名(index)】

<h2>カテゴリ1</h2> <ul> <? productData.forEach(function(option) { ?> <li> <img src="●A●" > <span>●B●<span> <span>●C●<span> </li> </ul> <h2>カテゴリ2</h2> <ul> <? productData.forEach(function(option) { ?> <li> <img src="●A●" > <span>●B●<span> <span>●C●<span> </li> </ul>

GASで以下を実現したい
A1:C5の範囲で最終行を読み込み商品数をカウント
HTMLのカテゴリ1の要素に値を埋め込み、商品数分くり返す

A6:C10の範囲で最終行を読み込み商品数をカウント
HTMLのカテゴリ2の要素に値を埋め込み、商品数分くり返す

試したこと

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("商品DB").getRange(1,1,5,3);; // 最終行を取得して商品点数を計算 var count = sheet.getLastRow() ; // HTMLテンプレートファイル指定(index) var html = HtmlService.createTemplateFromFile("index"); // 商品データをHTMLテンプレートファイルに html.productData = sheet.getRange(1, 1, count, 3).getValues(); Logger.log(html.productData); var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("商品DB").getRange(6,1,10,3);; var count = sheet.getLastRow() ; var html = HtmlService.createTemplateFromFile("index"); html.productData = sheet.getRange(6, 1, count, 3).getValues(); Logger.log(html.productData);

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

上記コードで実行したところ以下エラーで返されました

TypeError: sheet.getRange is not a function

要因、及び意図する動作をさせるために
どのようなコードが必要なのか、ご教示お願いいたします。

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

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

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

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

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

ppppp_123123

2022/07/02 10:04

回答を参考に var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("商品DB"); // 指定箇所の最終行(データが続いて下方向に入っている最終行)を取得して商品点数を計算 var count = sheet.getRange(1,1).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(); で実行したが、空白行も含めて読み込まれてしまっている状態です。 指定したそれぞれの範囲(A1:C5、A6:A10)で、データが入っている最終行を取得し商品数として計算して、商品数分のデータをHTMLに渡したいのですが、解決策がおわかりでしたらご教示ください。
guest

回答1

0

エラーの原因は1行目と13行目のsheetへの代入で参考サイトのコードにはない.getRangeを付け足したからです。
sheet.getRange()の結果を別の変数に代入してそこから行数を取得してください。

投稿2022/07/01 20:22

編集2022/07/01 20:33
RiaFeed

総合スコア2701

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

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

ppppp_123123

2022/07/02 09:37

回答ありがとうございます! var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("商品DB"); var range = sheet.getRange(1,1,5,3); にて実行したところ、エラーは解消されましたが、空白のセルも取得してしまい 意図する動作にはなりませんでした。 指定した範囲(A1:C5)の範囲で、データが入っている最終行を取得し商品数として計算して、必要なデータをHTMLに渡したいのですが、その場合に適した構文はどのような形になりますでしょうか?
RiaFeed

2022/07/02 10:04 編集

そもそもセル範囲を指定してgetLastRow()をしても意味はないようです。 今回提示のコードのように範囲が最初から分かっていて固定ならその最終行を使えばいいですし、 わかっていないのなら指定の行からループで特定の列の値を取得していって空白(もしくはカテゴリの区切りを示す内容)が出たところの一つ前を最終行にするしかないでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問