[ライブラリ][GAS]SpreadsheetDateConverterToObject

GAS

2021年12月に、この記事(2次元配列を連想配列にするテクニック)に関する最新情報をブログにしました。

[GAS]連想配列はMapオブジェクトを使おう 前半
どうも。つじけ(tsujikenzo)です。このシリーズでは「連想配列はMapオブジェクトを使おう」を、前半、後半でお送りします。今日は、前半戦です。今日のアジェンダはじめにMapオブジェクトの生成Mapオブジェクトの主な...

どうも。つじけ(tsujikenzo)です。このシリーズでは「便利な関数を使いまわす為にライブラリを活用しよう」についてお送りしています。ひとまず今回で最終回です。

前回のおさらい

前回でライブラリが完成しましたので、補足としてこのライブラリ[SpreadsheetDateConverterToObject]のマニュアルをご紹介させていただきます。

[GAS]2次元配列をオブジェクト化ライブラリ -Day2‐
2021年12月に、この記事(2次元配列を連想配列にするテクニック)に関する最新情報をブログにしました。どうも。つじけ(tsujikenzo)です。このシリーズでは「便利な関数を使いまわす為にラ...

Overview

SpreadsheetDateConverterToObject.js 1.0

(c) 2020 Kenzo Tsuji all rights reserved

GitHub Repository

coming soon

Introduction

This library contains a function that converts the value of one sheet of a spreadsheet from a 2D array to a Key (column heading) -Value associative array.

Sample sheet

[ [ 'id', 'name', 'age', 'favorite', 'address' ],
  [ 'tg001', 'Tsujike', 35, 'sushi', 'Hokkaido' ],
  [ 'tg002', 'Etau', 37, 'coffee', 'Miyazaki' ],
  [ 'tg003', 'Takahashi', 38, 'blog', 'Tokyo' ] ]

Returns(converted)

//Array type [ {id:’id’, name: ‘name’, age: ‘age’, favorite: ‘favorite’, address: ‘address’ }, {id:’tg001’, name:’Tsujike’,age:35,favorite:’salmon’,address:’Hokkaido’}, {id:’tg002’, name:’Etau’,age:37,favorite:’coffee’,address:’Miyazaki’}, {id:’tg003’, name:’Takahashi’,age:38,favorite:’blog’,address:’Tokyo’} ]

//Object type { id:{ id:’id’, name: ‘name’, age: ‘age’, favorite: ‘favorite’, address: ‘address’ }, tg001:{id:’tg001’, name:’Tsujike’,age:35,favorite:’salmon’,address:’Hokkaido’}, tg002:{id:’tg002’, name:’Etau’,age:37,favorite:’coffee’,address:’Miyazaki’}, tg003:{id:’tg003’, name:’Takahashi’,age:38,favorite:’blog’,address:’Tokyo’} }

Library ID

project key:MBzhjggcDiqmvnss9oreVp5lto6qNtfYu
Library ID:1s4kGJwF2eG-WGmeqgLWeqQtIBRAXUZbbh3fQ3f7QHvNywubO99nduFIY

Methods

.getElementsArray(spreadsheetID, sheetName)

@param{string} Spreadsheet ID
@param{string} Sheet Name e.g ‘Sheet1’
@Returns {object} Array type object from sheet. e.g [{},{}]

const id = 'SpreadSheet ID'; const name = 'sheet1'; const values = SpreadsheetDataConverterToObject.getElementsArray(id, name); console.log(values);

.getElementsObject(spreadsheetID, sheetName)

@param{string} Spreadsheet ID
@param{string} Sheet Name e.g ‘Sheet1’
@Returns {object} object type object from sheet. e.g {{},{}}

const id = 'SpreadSheet ID';
const name = 'sheet1';

const values = SpreadsheetDataConverterToObject.getElementsObject(id, name);
console.log(values);

.getElementData(spreadsheetID, sheetName, primaryKey)

@param{string} Spreadsheet ID
@param{string} Sheet Name e.g ‘Sheet1’
@param{string} primaryKey(unique key) from a sheet column A e.g ‘tg001’
@Returns {object} a record from sheet as an object.

const id = 'SpreadSheet ID';
const name = 'sheet1';
const key = ‘tg001’;

const value = SpreadsheetDataConverterToObject.getElementDate(id, name,key);
console.log(value); //{id:’tg001’, name:'Tsujike',age:35,favorite:'salmon',address:'Hokkaido'}

README File

coming soon

Sources

/**
* オブジェクト群を配列で格納するパーツ
* @param {string} SpreadSheet ID)
* @param {string} Sheet Name e.g ‘シート1’)
* @return  {array} 配列 e.g[{id:’tg001’, name:’kenzo’},{},{}]
*/
function getElementsArray(id,name) {
  const elementsData = [];
  const values = getSheetValues_(id, name);
  const header = [...values].shift();
  for (const value of values){
    elementsData.push(getElementInfo_(header,value));
  }
  return elementsData;
}

/**
* オブジェクト群をオブジェクトで格納するパーツ
* @param {string} SpreadSheet ID)
* @param {string} Sheet Name e.g ‘シート1’)
* @return  {object} オブジェクト e.g{{id:’tg001’, name:’kenzo’},{},{}}
*/
function getElementsObject(id,name) {
  const elementsData = {};
  const values = getSheetValues_(id, name);
  const header = [...values].shift();
  for (const [i,value] of values.entries()){
    elementsData[values[i][0]] = getElementInfo_(header,value);
  }
  return elementsData;
}

/**
* SSID,シート名,keyを渡すとオブジェクト化した1レコードを返すパーツ
* @param {string} SpreadSheet ID)
* @param {string} Sheet Name e.g ‘シート1’)
* @param {string} key e.g ‘id001’)
* @return  {object} オブジェクト e.g{id:’tg001’, name:’kenzo’}
*/
function getElementData(id,name,key) {
  const values = getSheetValues_(id, name);
  const header = [...values].shift();
  for (const value of values) {
    if (value.includes(key)) return getElementInfo_(header,value);
  }
}

//++プライベート関数ここから++//
/**
* 1要素をオブジェクト化してくれるパーツ
* @param {array} header  e.g [‘tg001’,’kenzo’]
* @param {array} value //values = Sheet.getDataRange().getValues()の、value
* @return  {object} オブジェクト e.g{id:’tg001’, name:’kenzo’}
*/
function getElementInfo_(header,value) {

const object = {};
  for(const [i, element] of header.entries()){
     object[header[i]] = value[i];
  }
return object
}

/** * idとシート名を渡すと2次元配列のVALUESを返すパーツ * @param {string} SpreadSheet ID) * @param {string} Sheet Name e.g ‘シート1’) * @return {object} 2次元配列 [[],[]]) */ function getSheetValues_(id, name){ const values = SpreadsheetApp.openById(id).getSheetByName(name).getDataRange().getValues(); return values; } //++プライベート関数ここまで++//

まとめ

以上で、ver1.0のマニュアルになります。今後は加工系の便利な関数を追加していきたいですし、最終的にはオブジェクトを2次元配列に変換する関数を実装したいと思います。途中GitHubでの管理も計画しておりますので、末永くよろしくお願いいたします。

このシリーズの目次

  1. [GAS]はじめてのライブラリ -Day1-
  2. [GAS]2次元配列をオブジェクト化ライブラリ -Day2‐
  3. [ライブラリ][GAS]SpreadsheetDateConverterToObject
  4. [ライブラリ][GAS]SpreadsheetDateConverterToObjectに機能を追加しよう
  5. [ライブラリ][GAS][マニュアル]SpreadsheetDateConverterToObject ver1.1
タイトルとURLをコピーしました