[ライブラリ][GAS]SymDiffChecker

GAS

どうも。つじけ(tsujikenzo)です。このシリーズでは「在庫管理バーコード」についてお届けしています。2つのデータテーブルの突合を行うのが目的ですが、その過程で作成できたfunctionをライブラリ化しました。シリーズはひとまず今回で最終回です。

前回のおさらい

前回でfunctionが完成しましたので、

[DB]在庫管理バーコード Stock4
どうも。つじけ(tsujikenzo)です。このシリーズでは「在庫管理バーコード」についてお届けしています。まだ全然終わらなくて4記事目になってしまいました💦前回のおさらい前回は、突合する為のデータはあらかじめ結合したら効率がいいということ

こちらの記事を参考にライブラリ化してください。(新IDE対応済)

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

いつものようにスタンドアロンスクリプトファイルは\TG_Solution Business Dept\02_project[GAS]Original Libraryに保存しています。

それではこれから[SymDiffChecker]のマニュアルをご紹介させていただきます。

Overview

SymDiffChecker 1.0

(c) 2021 Kenzo Tsuji all rights reserved

GitHub Repository

coming soon

Introduction

Function to get the symmetric difference between two tables. You can select up to 5 column names for each table. The number and order of columns to compare must be the same. Joins all the specified column names and compares the two tables.

Sample sheet

Returns

[ [ 'IDNo', '', 'ID001123499' ],[ 'ID2No2', 'ID001123457', 'ID001123458' ] ]

Script ID

1x-D0oVh3btCClcTvNUHRhYbzKlU9XaWdoAVh1bEAAMuMIlPc-nkCSl1f

Method

.symDiffChecker(…arr)

  • @param {string} Original Sheet ID
  • @param {string} Original Sheet Name
  • @param {string} Compared Sheet ID
  • @param {string} Compared Sheet Name
  • @param {string} Column Name 1 from Original Sheet
  • @param {string} Column Name 2 from Original Sheet
  • @param {string} Column Name 3 from Original Sheet
  • @param {string} Column Name 4 from Original Sheet
  • @param {string} Column Name 5 from Original Sheet
  • @param {string} Column Name 1 from Compared Sheet
  • @param {string} Column Name 2 from Compared Sheet
  • @param {string} Column Name 3 from Compared Sheet
  • @param {string} Column Name 4 from Compared Sheet
  • @param {string} Column Name 5 from Compared Sheet
  • @return {array} Symmetric difference 2d Array
  • @Library SpreadsheetDataConverterToObject(Script ID:
    1s4kGJwF2eG-WGmeqgLWeqQtIBRAXUZbbh3fQ3f7QHvNywubO99nduFIY)
let [orgSsId,orgSheetName,cmpSsId,cmpSheetName,param1,param2,param3,param4,
param5,param6,param7,param8,param9,param10] = arr;

const orgArray = SpreadsheetDataConverterToObject.getElementsArray(orgSsId,orgSheetName);
const cmpArray = SpreadsheetDataConverterToObject.getElementsArray(cmpSsId,cmpSheetName);

const orgValues = orgArray.map(element => [[element[param1],element[param2],element[param3],element[param4],element[param5]].join(``)]).flat();
const cmpValues = cmpArray.map(element => [[element[param6],element[param7],element[param8],element[param9],element[param10]].join(``)]).flat();

const orgDiffs = orgValues.filter(element => cmpValues.indexOf(element) === -1);
const cmpDiffs = cmpValues.filter(element => orgValues.indexOf(element) === -1);

return [orgDiffs, cmpDiffs];

README File

coming soon

Sources

/**
* 2つのテーブルの差分を返す 
*
* @param {string} オリジナルSheet ID
* @param {string} オリジナルシート名
* @param {string} 比較Sheet ID
* @param {string} 比較シート名
* @param {string} オリジナルシート列名1
* @param {string} オリジナルシート列名2
* @param {string} オリジナルシート列名3
* @param {string} オリジナルシート列名4
* @param {string} オリジナルシート列名5
* @param {string} 比較シート列名1
* @param {string} 比較シート列名2
* @param {string} 比較シート列名3
* @param {string} 比較シート列名4
* @param {string} 比較シート列名5
* @return {array} 両テーブルの差分の2次元配列
* @Library SpreadsheetDataConverterToObject(Script ID:
1s4kGJwF2eG-WGmeqgLWeqQtIBRAXUZbbh3fQ3f7QHvNywubO99nduFIY)
*/
function symDiffChecker(orgSsId,orgSheetName,cmpSsId,cmpSheetName,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10) {

//引数がない時は下記4行をコメントインしてください
// const orgArray = SpreadsheetDataConverterToObject.getElementsArray('1Z_RS7jaK4yAHtiRSNiiKe-zKEm61OBEUUlulqF67AAw','シート1');
// const cmpArray = SpreadsheetDataConverterToObject.getElementsArray('1Z_RS7jaK4yAHtiRSNiiKe-zKEm61OBEUUlulqF67AAw','シート1');
// [param1,param2,param3,param4,param5] = ['商品ID','納品書番号','','',''];
// [param6,param7,param8,param9,param10] = ['商品ID2','納品書番号2','','',''];

const orgArray = SpreadsheetDataConverterToObject.getElementsArray(orgSsId,orgSheetName);
const cmpArray = SpreadsheetDataConverterToObject.getElementsArray(cmpSsId,cmpSheetName);

const orgValues = orgArray.map(element => [[element[param1],element[param2],element[param3],element[param4],element[param5]].join(``)]).flat();
const cmpValues = cmpArray.map(element => [[element[param6],element[param7],element[param8],element[param9],element[param10]].join(``)]).flat();

const orgDiffs = orgValues.filter(element => cmpValues.indexOf(element) === -1);
const cmpDiffs = cmpValues.filter(element => orgValues.indexOf(element) === -1);

return [orgDiffs, cmpDiffs];

// console.log([orgDiffs, cmpDiffs]);
}

まとめ

以上で、SymDiffChecker ver1.0のマニュアルになります。要件定義が難しい案件ですが、全ての人が使いやすいライブラリの形はまだ勉強したことないので、今後も経験値を積みながらブラッシュアップできればと思います。末永くよろしくお願いいたします。

社内在庫管理バーコードの突合はどうなったか?ですが、途中から完全に放置しましたが、このライブラリがあれば問題無いと思います💦機会があれば記事を書きます。

このシリーズの目次

  1. [DB]在庫管理バーコード Stock1
  2. [DB]在庫管理バーコード Stock2
  3. [DB]在庫管理バーコード Stock3
  4. [DB]在庫管理バーコード Stock4
  5. [ライブラリ][GAS]SymDiffChecker

Comments

Copied title and URL