とある日
コピペ職人に俺はなるっ╭( ・ㅂ・)و ̑̑ グッ !
╰( `•ω•)╮-=ニ< 無料のQRコード作成サイトからちまちま作るのが面倒だぁ
パラメータを設定してQRコードを生成するWebサイトが作れないぉ(꒪ཫ꒪; )
前提条件
- 開発を楽にするためのツールとして作成しています
- QRコードはHololens2で使用します
- python環境がない場所でも動作する事(Windows限定)
- 日本語が文字化けしてしまうのでbase64変換した文字列をQRコード化しています
開発環境
項目 | バージョン | 備考 |
---|---|---|
Python | 3.7.5 |
インストールパッケージ
項目 | バージョン | 備考 |
---|---|---|
pandas | --- | Excelファイル読み込むのに使用 |
xlrd | --- | pandasでexcelを読み込むのに必要 |
PyInstaller | --- | exe化 |
qrcode | --- | QRコード生成 |
Pillow | --- | png画像作成 |
パッケージ一括インストール
環境を揃えるために使用します
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の場合
-
仮想環境作成
-
プロジェクトにrequirements.txtを追加します
Excelデータ
コード
- セル情報を文字列に変換し区切り文字を決めて連結します
- 文字列をbase64に変換します
- base64文字列をQRコード化します
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のファイルサイズがでぶちんになりますが目を瞑ります( ˘ω˘ ) スヤァ
pyinstaller hoge.py --onefile --noconsole
- --onefile
- 一つのファイルにまとめる
- --noconsole
- 黒い画面を出さなくする
使い方
exeにxlsxファイルをdrag & dropする
読み込み先のコード
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));
}
}