見出し画像

GAS|スプレッドシートのシート内から全データを取得する|getValues|getDataRange|Sheet|SpreadsheetApp|Google Apps Script|開発裏話

マンガポスト日本版」では、Google ドライブ内に保存している「コミックス発売日情報」を参照して、その日付を基に毎日配信しています。

この「コミックス販売日情報」は、スプレッドシートで作ったものです。

Google ドライブ内に保存しているスプレッドシートの、特定のシート内から全データを取得するには、以下のようにします。シート内に存在する全セルから、「二次元配列」としてデータを取得します。

/**
 * Gets the all values in the sheet.
 * 
 * @param sheet — the Sheet object
 * @return Object[][] — a two-dimensional array of values
 */
function getAllValues(sheet) {
  // get all values
  return sheet.getDataRange().getValues();
}

注意が必要なのは、新たに作成したスプレッドシートのシート内(=空)から全データを取得した場合、この二次元配列は「null」ではありません。「1 x 1」の空データが存在しています

ですので、もしシート内の「データ有無」を確認したい場合は、取得したニ次元配列から判断するのも手間なので、以下のような方法もあります。

手間ですが、取得した二次元配列からデータ有無を確認するならば、以下のようになります。

/**
 * The values is empty?
 * 
 * @param values — a two-dimensional array of values
 * @return Boolean — true if the values is empty; false otherwise
 */
function isEmptyValues(values) {
  if (0 == values.length) {
    return true;
  }
  if (1 < values.length) {
    return false;
  }
  var value = values[0];
  if (0 == value.length) {
    return true;
  }
  if (1 < value.length) {
    return false;
  }
  if (!value[0]) {
    return true;
  }
  return false;
}

これと組み合わせて、シート内から取得したデータの二次元配列を分かりやすくする、データが無ければ配列のサイズを「ゼロ」にするには、以下のようにします。

/**
 * Gets the all values in the sheet.
 * 
 * @param sheet — the Sheet object
 * @return Object[][] — a two-dimensional array of values
 */
function getAllValues(sheet) {
  // get all values
  var values = sheet.getDataRange().getValues();
  
  // is empty?
  if (isEmptyValues(values)) {
    return [];
  }
  return values;
}

やはり、上記のように、取得した配列が空(サイズがゼロ)かどうかの方が、データは扱いやすいです。

マンガポスト日本版

マンガポスト日本版の Twitter 公式アカウントです。
漫画(まんが)・コミックの新刊情報を毎日配信中!

コーヒーブレイク

一瞬にして世界中すべての人間が石と化す、謎の現象に巻き込まれた高校生の大樹。数千年後――。目覚めた大樹とその友・千空はゼロから文明を作ることを決意する!!

この記事が気に入ったらサポートをしてみませんか?