Excelちゃんが黒魔術でQRコードさんを召喚してみた

## とある日
コピペ職人に俺はなるっ╭( ・ㅂ・)و ̑̑ ｸﾞｯ !

╰( `•ω•)╮-=ﾆ< 無料のQRコード作成サイトからちまちま作るのが面倒だぁ
パラメータを設定してQRコードを生成するWebサイトが作れないぉ(꒪ཫ꒪; )

## 前提条件
* 開発を楽にするためのツールとして作成しています
* QRコードはHololens2で使用します
* python環境がない場所でも動作する事(Windows限定)
* 日本語が文字化けしてしまうのでbase64変換した文字列をQRコード化しています

## 開発環境
| 項目 | バージョン | 備考 |
| --- | --- | --- |
| Python | 3.7.5 |  |

## インストールパッケージ
| 項目 | バージョン | 備考 |
| --- | --- | --- |
| pandas | --- | Excelファイル読み込むのに使用 |
| xlrd | --- | pandasでexcelを読み込むのに必要 |
| PyInstaller | --- | exe化 |
| qrcode | --- | QRコード生成 |
| Pillow | --- | png画像作成 |

## パッケージ一括インストール
環境を揃えるために使用します

```txt:requirements.txt
altgraph==0.17
colorama==0.4.3
future==0.18.2
numpy==1.19.0
pandas==1.0.5
pefile==2019.4.18
Pillow==7.1.2
pip==19.2.3
PyInstaller==3.6
python-dateutil==2.8.1
pytz==2020.1
pywin32-ctypes==0.2.0
qrcode==6.1
setuptools==41.2.0
six==1.15.0
xlrd==1.2.0
```

## 環境作成
* 開発環境がvisual studioの場合
 1. 仮想環境作成
     -  Python環境 右クリック -> 環境を追加
     ![8dc31f34-e69d-4b6f-96f5-8a301a403dbe-960x299r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673767/f58422e4-6511-ff87-6072-c2bbcbf79261.png)

     -  そのままOK押下します(仮想環境作成時にパッケージインストールできます)
![9f4c64a4-1908-4713-b45a-d7a1c958e80e-960x633r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673767/6f2b2a7c-4f36-a0f2-cd9f-42325aa5fdfd.png)



 2. プロジェクトにrequirements.txtを追加します
 3. 作成した仮想環境上で右クリック -> requirements.txtからインストールをクリックします
![31fd5512-c90b-4d64-8557-74f405923245-960x607r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673767/0b0544c1-1168-dec0-a811-1a490d1a0c93.png)

## Excelデータ
![ab36a8f2-c3ae-4656-b023-4d21fb7b7f3b-960x107r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673767/cd61c59f-d730-9d9b-56b4-ca64dfa6d30c.png)

## コード
1. セル情報を文字列に変換し区切り文字を決めて連結します
2. 文字列をbase64に変換します
3. base64文字列をQRコード化します

```python:ExcelToQRCode.py
import sys
import os
import pandas as pd
import qrcode
import base64

def main():
	# コマンドライン引数
	args = sys.argv
	# 引数が2つより小さい場合は処理しない
	if len(args) < 2:
		exit()

	# エクセルファイル判定
	split = os.path.splitext(args[1])
	if split[1] != '.xlsx':
		exit()

	# 最初のシート取得する
	excel_data = pd.read_excel(args[1], sheet_name = 0, encoding='utf-8')

	param_list = []
	for i, row in excel_data.iterrows():
		if i > 0: 
			temp = ""
			for value in row.iloc[2:8]:
				temp += str(value) + '|'
			temp = temp[:-1]
			full_path = os.getcwd() +'\\' + row.iloc[1] + '.png'
			param_list.append((full_path, temp))

	for index in range(len(param_list)):
		image_qr = qrcode.make(base64.b64encode(param_list[index][1].encode('utf-8')))
		image_qr.save(param_list[index][0])

	if len(param_list) < 1:
		print("作成するQRコードがありませんでした")
	else:
		print("QRコードを作成しました")

if __name__ == '__main__':
	main()
```

## exe化
下記のコマンドを打つとexe化します
exeのファイルサイズがでぶちんになりますが目を瞑ります( ˘ω˘ ) ｽﾔｧ

```txt:
pyinstaller hoge.py --onefile --noconsole
```

* --onefile
 - 一つのファイルにまとめる

* --noconsole
 - 黒い画面を出さなくする

## 使い方
exeにxlsxファイルをdrag & dropする

## 読み込み先のコード
```C#:Utility.cs
public static class Utility
{
    public static string Base64Decode(string value)
    {
        return System.Text.Encoding.UTF8.GetString(System.Convert.FromBase64String(value));
    }

    public static List<string> GetQRCordData(string value)
    {
        string data = Utility.Base64Decode(value);
        return new List<string>(data.Split(new[] { "|" }, System.StringSplitOptions.None));
    }
}
```