電気ウナギ的○○

About Home

LibreOffice のマクロで FeliCa 連続読み込みができない

shinoda (2020年1月23日 00:54)
うーん・・・

LibreOffice の Python マクロで FeliCa カードの連続読み込みができない。

こういうソース(無限ループしてるけど、テストで break 処理書くのが面倒くさかっただけなんで(^^;;)をマクロ登録して、CardRead 関数を実行する。

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

import uno

def CardRead(*args):

    import nfc
    from nfc.clf import RemoteTarget

    def on_connect(tag):
        doc = XSCRIPTCONTEXT.getDocument()
        sheet = doc.getSheets().getByName('CardMst')
        cell = sheet.getCellByPosition(1,1)
        cell.String = str(tag)

    def main():
        while True:
            with nfc.ContactlessFrontend('usb') as clf:
                clf.connect(rdwr={'on-connect': on_connect})

    main()

そうすると、一枚目はちゃんと読み込んでシートの左上に ID が表示されるんだけど、二枚目のカードを読むと

com.sun.star.uno.RuntimeException: Error during invoking function CardRead in module file:///C:/Program%20Files/LibreOffice/share/Scripts/python/nfc_get_card_info.py (<class 'usb1.USBErrorAccess'>: LIBUSB_ERROR_ACCESS [-3]
  File "C:\Program Files\LibreOffice\program\pythonscript.py", line 907, in invoke
    ret = self.func( *args )
<略>
  File "C:\Users\hoge\AppData\Roaming\Python\Python35\site-packages\usb1\__init__.py", line 125, in raiseUSBError
    raise __STATUS_TO_EXCEPTION_DICT.get(value, __USBError)(value)
)

こんなエラーが出ちゃう。これ以降、一切カードは読めない。

どうも、権限の無いアクセスを USB デバイスにしたってことらしい(ちょっとググったが英語のページしかヒットしなかったので意訳(^^; 違ってたら正解を教えてくれナンス>識者の皆様)

ちなみに、このスクリプトをマクロではなく普通の Python スクリプトとして実行すると、そういうエラーは出ない。マクロ独自の症状のようだ。

結局、どうしてもこのエラーを解決できなかったので、外部の Python スクリプトとして実行しておいて、カード情報を読み込んだら内容を CSV ファイルに吐いて、LibreOffice Calc からその CSV ファイルを一定時間毎に読み込む形にしようと思ってるところだけど、「お前、馬鹿だなあ。こう直したら一発で解決だべ」って情報をお持ちの識者の方がいらっしゃったら、ぜひご教示くださいませ。

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/5525

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE