外部プログラムで読んだカード情報を LibreOffice に渡す

外部プログラムで読んだ FeliCa カードの情報を LibreOffice の Calc に渡してみた。

もし、マクロで FeliCa カードが読めないのなら、この方法でも良いかな・・・と。
(ま、別のエントリーで書く予定だけど、マクロとして実行した Python プログラムで FeliCa カード読めたんだけどね)

1.LibreOffice Calc(表計算)を外部プログラムとの通信可能な状態で起動。

外部プログラムと通信する port 番号を指定して Calc を起動するので、メニュー等からではなく、コマンドで起動すること(Windows ならコマンドプロンプトからとか)

C:\Users\shinoda\Source\Python>"C:\Program Files\LibreOffice\program\soffice.exe" --calc --norestore --accept=socket,host=localhost,port=8100;urp

これで、外部プログラムとの通信用 port(8100番)を開けた Calc が起動する。

2.外部プログラムの実行。

今回起動する Python スクリプトはこんな感じ。
カードリーダー SONY RC-S380 で読みとった FeliCa カード情報を Calc の任意のセルに貼り付けるだけのプログラム。

import nfc
from nfc.clf import RemoteTarget

import uno
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext(
    "com.sun.star.bridge.UnoUrlResolver", localContext)

# Calc に port=8100 で接続
ctx = resolver.resolve( "uno:socket,host=localhost,port=8100;urp;StarOffice.ComponentContext" )
smgr = ctx.ServiceManager

# ドキュメントオブジェクトの取得
desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)
doc = desktop.getCurrentComponent()
sheet = doc.getSheets().getByName('Sheet1')

# カード読み込み待ち
clf = nfc.ContactlessFrontend('usb')

# 'A1' セルにカードリーダー情報をセット
cell = sheet.getCellRangeByName('A1')
cell.String = str(clf)

# カードがタッチされた(情報読み込み)
tag = clf.connect(rdwr={
    'on-connect': lambda tag: False
})

# 'A2' セルにカード情報をセット
cell = sheet.getCellRangeByName('A2')
cell.String = str(tag)

これを、コマンドプロンプトから実行(LibreOffice に付いてきたマクロ実行用の Python で実行)する。

C:\Users\shinoda\Source\Python>"C:\Program Files\LibreOffice\program\python.exe" .\cellset_to_calc2.py

3.起動と同時に、Calc の 'A1'セルにカードリーダー情報がセットされる

4.カードを読むと、その情報が 'A2'セルにセットされる

20190825_libreOffice1.jpg

ばっちりやね。

デメリットは、コマンドプロンプトから Calc を起動しないといけないことか。

でも、まあ、最悪この方法で LibraOffice にカード情報を渡せることはわかった。人類にとっては大きな一歩だ(笑)

トラックバック(0)

このブログ記事を参照しているブログ一覧: 外部プログラムで読んだカード情報を LibreOffice に渡す

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

コメントする

このブログ記事について

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

ひとつ前のブログ記事は「LibreOffice の Python で外部スクリプトを実行してみる」です。

次のブログ記事は「LibreOffice Calc のマクロで FeliCa カードを読む」です。

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


月別 アーカイブ

電気ウナギ的○○ mobile ver.

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