CSVからvCardを作成して連絡先.appに読みこむ 6月14日, 2020


必要があって受け取ったExcelファイルの宛名を官製ハガキに印刷しなければならなくなった。Catalinaになってから「葉書AB」は使えなくなった。64bitでビルドし直さなければならないのでね。それで、この手の作業は現在は「おまかせ宛名はがき」に頼りきり。そのためには、まず「連絡先.app」に読み込ませなければならない。直接読み込ませることができる筈だけど、どうもご機嫌斜め。何か約束があるようで、csvファイルを受け付けてくれない。この手の「無言の約束事」が結構の曲者なのだ。

試行錯誤の末になんとか読んではくれたのだけど、これってよくありそうな作業だ。私はあまりやらないけど。元来、vCard3が単純なフォーマットであるのを知っているので、目下中心に遊んでいるPythonでスクリプトを組んでみた。ただし、例によって我が環境でしか無事には動かないものだろうし、あれこれのチェック作業を省いているので、単なる自分の作業メモかもしれないのだけど。

csvファイルを用意する。その構造は、{姓、名、姓読み、名読み、携帯電話番号、自宅電話番号、自宅メールアドレス、自宅住所[ 郵便番号、都道府県名、市区町村以下 ]}となっているものとした。

住所については、もっと詳細に「連絡先.app」の欄に対応づけることもできるだろうが、葉書に印刷するという目的からすれば、これで充分。

起動すると、csvファイル読み取り用のダイアログが開くので、ソースを指定する。変換後にvcfファイルを保存するためのダイアログが開くので保存先を指定する。「連絡先.app」から、"ファイル>読み込む…"でこのvcfファイルを指定する。以上で終了。※csvソース2行目の「平将門」さんは、「姓読み」を省略しているため、「すべての連絡先」末尾の「読みなしグループ」になる例です。

csvソースの例:
服部, 半蔵, はっとり,, 011-1111-1111, 01-1111-1111, aaa@bbb.cc, 111-1111, , 大江戸区城内西1-1
平, 将門, , まさかど, 022-2222-2222, 02-2222-2222, ddd@eee.ff, 222-2222, , 大江戸区城内東2-2

出力されたvcfとカード@連絡先アプリ

【追記】tkinterのmac対応 7月4日, 2020

このpythonスクリプトでは,tkinterパッケージを利用している。しかしこのパッケージは私が思うにmacOSとの相性は最低だ。色々な箇所に実用上の不具合がある。たとえば、(ここでは関係ないが)ウィジェットに漢字を入力する場合、確定させるリータンキーを入力するまで文字が表示されないような例もある。上記でもasksaveasfilenameに支障があることに気づいた。それは、vcfファイルの保存先を指定するダイアログで、既存ファイルを指定するとエラーとなるのだ。これは、macOSでは(多分Windowsでも)filedialog.pyを使用せず、システムのファイルダイアログを用いることに起因するものらしく、解決方法を知らない。本来なら例外処理が必要だが、ここでは省いている。ちょっと格好悪い。