- ホーム
- ブログ
- Google Apps Script
- 【GAS】 spreadSheetのデータを扱いやすいオブジェクトに変換する
GASでは、spreadSheetにあるデータを取得して、オブジェクトに変換し、加工するという処理を頻繁に行います。その際に便利なクラスを紹介します。
配列の中に、連想配列を入れるというオブジェクトが一番コードの可読性もよく、順番も保証されて扱いやすいと思います。そこで次のようなクラスを作りました。
class DataSheet {
constructor(ssId, shName, columnNumber, lastColumn) {
// sheetオブジェクトの取得
this.ssId = ssId;
this.shName = shName;
this.targetSh = SpreadsheetApp.openById(this.ssId).getSheetByName(this.shName);
// 範囲の指定 ,valuesの取得
this.columnNumber = columnNumber; // 最終行を判定する列番号の指定
this.lastColumn = lastColumn; // 最終列番号の指定
this.lastRow = this.targetSh.getRange(this.targetSh.getMaxRows(), this.columnNumber).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); // 特定列の最終行を取得(最下段から検索)
this.values = this.targetSh.getRange(1, 1, this.lastRow, this.lastColumn).getValues();
}
toArrayObj() {
// arrayオブジェクトにする
const array = [];
const [header, ...records] = this.values;
const map = records.map(
record => record.reduce((acc, value, index) => acc.set(header[index], value), new Map())
);
map.map((key) => {
let obj = Object.fromEntries(key.entries());
array.push(obj);
});
return array;
}
}
以下のようなシートがあったとします。
次にようにクラスをインスタンスし、toArrayObj()を実行します。
// datasheet
const sheet = new DataSheet(シートID, シートの名前, lastRowを判定する列番号, 取得する範囲の最終列番号);
const obj = sheet.toArrayObj();
console.log(obj);
すると次のようなオブジェクトが取得できます。
[ { '氏名': '佐藤太郎', '年齢': 30, '住所': '東京都新宿区', '身長': 175, '体重': 70 },
{ '氏名': '鈴木花子', '年齢': 25, '住所': '大阪府大阪市', '身長': 160, '体重': 55 },
{ '氏名': '高橋一郎', '年齢': 40, '住所': '北海道札幌市', '身長': 180, '体重': 80 } ]
このオブジェクトを使って、条件分岐、データの加工などを行うことができます。
// for文で回してみます。
for (const [index, data] of Object.entries(obj)) {
if (data["年齢"] >= 30) {
console.log(`${index}_${data["氏名"]}さんは30歳以上です。`);
}else{
console.log(`${index}_${data["氏名"]}さんは30歳未満です。`);
}
let BMI = data["体重"]/(data["身長"]/100)/(data["身長"]/100);
console.log(`${index}_${data["氏名"]}さんのBMIは${BMI}です`)
}
以下のような結果が得られます。
16:45:51 情報 0_佐藤太郎さんは30歳以上です。
16:45:51 情報 0_佐藤太郎さんのBMIは22.857142857142858です
16:45:51 情報 1_鈴木花子さんは30歳未満です。
16:45:51 情報 1_鈴木花子さんのBMIは21.484375です
16:45:51 情報 2_高橋一郎さんは30歳以上です。
16:45:51 情報 2_高橋一郎さんのBMIは24.691358024691358です
16:45:52 お知らせ 実行完了
以上、GASでspreadSheetのデータを扱いやすいオブジェクトに変換するクラスを紹介しました。
参考になれば幸いです。
可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More