2021年12月に、この記事(2次元配列を連想配列にするテクニック)に関する最新情報をブログにしました。
どうも。つじけ(tsujikenzo)です。このシリーズでは「スプレッドシートを2次元配列で取得した後に、列を管理するのが大変だからライブラリを作ったよ」という連載を行っています。ライブラリに機能が追加される度に記事を追加しております。
今回のアップデートについて
追加されたメソッドは2つです。こちらの記事でライブラリをアップデートする流れを紹介しています。
それでは今回は[SpreadsheetDateConverterToObject Ver1.1]のマニュアルをご紹介させていただきます。
Overview
SpreadsheetDateConverterToObject.js 1.1
(c) 2020-2021 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'}
[NEW].undoElementsArray(array)
@param{array} e.g a return from .getElementsArray() method @Returns {array} 2d arrayreturn array.map(element => Object.values(element));
[ [ 'id', 'name', 'age', 'favorite', 'address' ], [ 'tg001', 'Tsujike', 35, 'sushi', 'Hokkaido' ], [ 'tg002', 'Etau', 37, 'coffee', 'Miyazaki' ], [ 'tg003', 'Takahashi', 38, 'blog', 'Tokyo' ] ]
[NEW].undoElementsObject(object)
@param{object} e.g a return from .getElementsObject() method @Returns {array} 2d array return Object.values(object).map( element => Object.values(element));
[ [ 'id', 'name', 'age', 'favorite', 'address' ], [ 'tg001', 'Tsujike', 35, 'sushi', 'Hokkaido' ], [ 'tg002', 'Etau', 37, 'coffee', 'Miyazaki' ], [ 'tg003', 'Takahashi', 38, 'blog', 'Tokyo' ] ]
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); } }/** * 配列型オブジェクトを2次元配列に変換する * @param {array} 配列型オブジェクト * @return {array} 2次元配列 */ function undoElementsArray(array) { return array.map(element => Object.values(element)); } /** * オブジェクト型オブジェクトを2次元配列に変換する * @param {object} オブジェクト型オブジェクト * @return {array} 2次元配列 */ function undoElementsObject(object) { return Object.values(object).map( element => Object.values(element)); } //++プライベート関数ここから++// /** * 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.1のマニュアルになります。今後とも末永くよろしくお願いいたします。