LibreOffice Calc のマクロで FeliCa カードを読む

エラーが出てうまく動かなかった FeliCa カード読み込みマクロだが、結局、

com.sun.star.uno.RuntimeException: Couldn't convert SONY RC-S380/P on usb:003:008 to a UNO type; caught exception: <class 'AttributeError'>: 'ContactlessFrontend' object has no attribute 'getTypes', traceback follows
no traceback available...

というエラーのとおり、文字列しかセットできないセルに対して、ContactlessFrontend オブジェクトをそのまま突っ込んだのが悪かった。str(clf) のように、str 関数を使って文字列変換してからセルにセットすればよかったのだ。

というわけで、

# -*- coding: utf-8 -*-
# LibreOffice 用マクロ

import uno

def GetCardData( ):

    import nfc
    from nfc.clf import RemoteTarget

    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.getSheets().getByName('sheet1')

    clf = nfc.ContactlessFrontend('usb')

    cell = sheet.getCellRangeByName('A1')
    cell.String = str(clf)

    tag = clf.connect(rdwr={
        'on-connect': lambda tag: False
    })

    cell = sheet.getCellRangeByName('A2')
    cell.String = str(tag)

というマクロを作成し、GetCardData を実行。

20190825_nfc1.jpg

すぐに、'A1'セルにカードリーダー情報がセットされる。

この状態で、カードリーダーで FeliCa カードを読むと、今度は 'A2'セルに FeliCa カード情報がセットされる。

20190825_nfc2.jpg

ばっちりやん、ばっちりやん。

これが一番操作的にはシンプルでええね。普通に Calc のファイルもダブルクリックで起動できるしね。(外部プログラムから FeliCa 情報を得ようとすると、Cals 自体を色々オプションをつけてコマンドラインから起動しないといけない)

トラックバック(0)

このブログ記事を参照しているブログ一覧: LibreOffice Calc のマクロで FeliCa カードを読む

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/5415

コメントする

このブログ記事について

このページは、shinodaが2019年8月25日 18:36に書いたブログ記事です。

ひとつ前のブログ記事は「外部プログラムで読んだカード情報を LibreOffice に渡す」です。

次のブログ記事は「土曜日は高森高校グラウンド清掃」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら