概要
-
sheet
オブジェクトの関数 - 値が入っている全てのセルを持つ
Range
オブジェクトを取得できる
- 指定したスプレッドシートからセルの範囲を読み込む。
- 行番号を指定しないばあい、空白の行も含め一番下の行まで読み込む。
importrange
でクローンしたスプレッドに対してgetDataRange()
すると、空白の行まで値が入っているとみなし、取得してしまう。
→ query
関数で空白の行を表示しないことで解決できる。
事象確認
以下のデータをJSON形式に変換するGASで事象を確認してみよう。
データを読み込んでいる
importrange("https://docs.google.com/spreadsheets/d/[シートID]/edit","[範囲]")
さっそくimportrange
でクローンしたスプレッドに対してgetDataRange()
してみる。
JSONに変換するGAS
function getData(id, sheetName) {
var sheet = SpreadsheetApp.openById('[スプレッドのID]').getSheetByName('[シート名]');
var rows = sheet.getDataRange().getValues();
var keys = rows.splice(0, 1)[0];
return rows.map(function(row) {
var obj = {}
row.map(
function(item, index) {
obj[keys[index]] = item;
});
// ログ表示
Logger.log(obj);
});
}
▼ログ。空白行が取得されてしまい、無駄なデータが大量に生成されている。
解決法
importrange
で取得したデータから空白の行を取り除く。
以下のようにquery
関数でキー値がNULLでないものを指定してあげる。
query関数を適用
query(importrange("https://docs.google.com/spreadsheets/d/[シートID]/edit","[範囲]"),"where Col1 IS NOT NULL")