LoginSignup
8
4

More than 3 years have passed since last update.

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

Posted at

とある日

コピペ職人に俺はなるっ╭( ・ㅂ・)و ̑̑ グッ !

╰( `•ω•)╮-=ニ< 無料の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の場合

    1. 仮想環境作成
      • Python環境 右クリック -> 環境を追加 8dc31f34-e69d-4b6f-96f5-8a301a403dbe-960x299r.png
      • そのままOK押下します(仮想環境作成時にパッケージインストールできます) 9f4c64a4-1908-4713-b45a-d7a1c958e80e-960x633r.png
  1. プロジェクトにrequirements.txtを追加します
  2. 作成した仮想環境上で右クリック -> requirements.txtからインストールをクリックします 31fd5512-c90b-4d64-8557-74f405923245-960x607r.png

Excelデータ

ab36a8f2-c3ae-4656-b023-4d21fb7b7f3b-960x107r.png

コード

  1. セル情報を文字列に変換し区切り文字を決めて連結します
  2. 文字列をbase64に変換します
  3. 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));
    }
}
8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4