PostgreSQL: 2020年1月アーカイブ

うーん・・・

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 ファイルを一定時間毎に読み込む形にしようと思ってるところだけど、「お前、馬鹿だなあ。こう直したら一発で解決だべ」って情報をお持ちの識者の方がいらっしゃったら、ぜひご教示くださいませ。

このアーカイブについて

このページには、2020年1月以降に書かれたブログ記事のうちPostgreSQLカテゴリに属しているものが含まれています。

前のアーカイブはPostgreSQL: 2018年5月です。

次のアーカイブはPostgreSQL: 2024年11月です。

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

月別 アーカイブ

電気ウナギ的○○ mobile ver.

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