LibreOffice Calc のマクロで FeliCa カードを読む[プログラミング]
(2019-08-25 18:36:17) by shinoda
エラーが出てうまく動かなかった 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 を実行。
すぐに、'A1'セルにカードリーダー情報がセットされる。
この状態で、カードリーダーで FeliCa カードを読むと、今度は 'A2'セルに FeliCa カード情報がセットされる。
ばっちりやん、ばっちりやん。
これが一番操作的にはシンプルでええね。普通に Calc のファイルもダブルクリックで起動できるしね。(外部プログラムから FeliCa 情報を得ようとすると、Cals 自体を色々オプションをつけてコマンドラインから起動しないといけない)
コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る
Powered by
MT4i 3.0.8