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 公式アカウントです。
漫画(まんが)・コミックの新刊情報を毎日配信中!
コーヒーブレイク
一瞬にして世界中すべての人間が石と化す、謎の現象に巻き込まれた高校生の大樹。数千年後――。目覚めた大樹とその友・千空はゼロから文明を作ることを決意する!!