エラーが出てうまく動かなかった 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 followsno traceback available...
というエラーのとおり、文字列しかセットできないセルに対して、ContactlessFrontend オブジェクトをそのまま突っ込んだのが悪かった。str(clf) のように、str 関数を使って文字列変換してからセルにセットすればよかったのだ。
というわけで、
# -*- coding: utf-8 -*-# LibreOffice 用マクロimport unodef GetCardData( ):import nfcfrom nfc.clf import RemoteTargetdoc = 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 を実行。
すぐに、'A1'セルにカードリーダー情報がセットされる。
この状態で、カードリーダーで FeliCa カードを読むと、今度は 'A2'セルに FeliCa カード情報がセットされる。
ばっちりやん、ばっちりやん。
これが一番操作的にはシンプルでええね。普通に Calc のファイルもダブルクリックで起動できるしね。(外部プログラムから FeliCa 情報を得ようとすると、Cals 自体を色々オプションをつけてコマンドラインから起動しないといけない)
コメントする