前提
googleスプレッドシートで編集したものをGoogle Apps Scriptを通してHTML(テキストファイル)に書き出したい。
そのため、下記サイトのコードを参考にした。
https://www.terakoya.work/google-spread-sheet-html-template-output-save/
実現したいこと
カテゴリ毎にデータが複数存在している状態で
各カテゴリ毎に、取得するデータ範囲を指定し、データが入っている分だけ要素を繰り返しHTMLに書き出したい。
各カテゴリのデータは変動するため、切り分けたい。
(例)
【スプレッドシート:シート名(商品DB)】
A | B | C |
---|---|---|
画像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
要因、及び意図する動作をさせるために
どのようなコードが必要なのか、ご教示お願いいたします。
回答を参考に
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("商品DB");
// 指定箇所の最終行(データが続いて下方向に入っている最終行)を取得して商品点数を計算
var count = sheet.getRange(1,1).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
で実行したが、空白行も含めて読み込まれてしまっている状態です。
指定したそれぞれの範囲(A1:C5、A6:A10)で、データが入っている最終行を取得し商品数として計算して、商品数分のデータをHTMLに渡したいのですが、解決策がおわかりでしたらご教示ください。
