ZaimのデータをLet's家計簿用に変換する

長年愛用していた家計簿ソフトのやさしく家計簿が使えなくなったので、ScanSnapとZaimの組み合わせに変えたところ、かなり使い勝手良くなった。
alasixosaka.hatenablog.com
しかし、Zaimのデータを最終的にLet's家計簿に読み込む必要があり、データ変換が必要だった。といっても、そんなに大した手間でもないのだが、pythonでこの変換を一発で行うスクリプトを書いてみた。
まず、元のデータはこんな感じになっている。

f:id:alasixOsaka:20210124084320j:plain
ZaimのWebサイトからエクスポートした元のCSVファイル。これをLet's家計簿用に変換する

Let's家計簿で読み込むためには、一行目がタイトル行で”日付,お店,内容,収入,支出,費目,口座”となっていて、二行目から各タイトルに応じたデータが格納されている必要がある。また、上の図を見てわかるように、口座に対応する情報がない、更に、お店に関しては、同じお店で買った物品については二行目以降は”ー”となっていてお店の名前が無い状態になっているので二行目以降もお店の名前を入れる必要がある。この辺りも一度にやってしまいたい。

PythonCSVファイルを読み込む

まず、元のデータのCSVファイルを読む必要がある。PythonではCSVモジュールというのが標準で実装されているのでそれを使えば良い。なお、使ったPythonは3.x系で、windows10でPycharmを使って開発した。
例えばFドライブにあるZaimというフォルダにあるZaimTest.CSVというファイルを読み込む場合。

import csv

with open('f:\zaim\zaimtest.csv') as f:
reader = csv.reader(f)
for row in reader:

としてやればよい。
書き出すときも同様で、同じフォルダにZaimTest_Lets.CSVというファイルを作ってそこに書き込む場合は、

with open('f\zaim\zaimtest_lets.csv', 'w') as f:
writer = csv.writer(f)
writer.writerow([0, 1, 2])

列を入れ替えて出力する

単純にZaimのデータからLet's家計簿ように列のデータを入れ替える場合を考えると、日付が1列目、お店が9列目、内容が7列目、収入が11列目、支出が12列目、費目が4列目(ないし3列目)、口座はなしとなっているのでこれを順番に読みだして書いていけばよい。

import csv

data = []
n = 0

with open('f:\zaim\zaimtest.csv') as f, open('f\zaim\zaimtest_lets.csv', 'w') as g:
reader = csv.reader(f)
writer = csv.writer(g, lineterminator="\n")
for row in reader:
     if n = 0
          writer.writerow['日付','お店','内容','収入','支出','費目','口座']
     if n != 0
          data.append(row[0])
          data.append(row[8])
          data.append(row[6])
          data.append(row[10])
          data.append(row[11])
          data.append(row[3])
          data.append(" ")
          writer.writerow(data)
          data.clear()
     n=n+1

読み込みようのファイルはfとしてオープンし、書き込み用のファイルはgとしてオープンして同時に読み書きしている。
また、元ファイルの1行目はタイトル行なので、空読みをして、Let's家計簿のタイトル行を書き込んでいる。一行書いた後にデータをクリアして、一行ずつデータを書き込んでいる。全部のデータをアペンドしてから書き込むと改行がうまくできないのでこういう書き方にしてみた。もっとスマートに書く方法があるように思うがとりあえず動けば良いということでこうしてみた。

ファイル名を指定して読み込む

一応列の入れ替えはできたが、このままでは読み込むファイルが変わるといちいちプログラムを修正する必要があるので実際には使い物にはならないので、ファイルを指定し読み込めるようにする。

import csv, os, tkinter, tkinter.filedialog, tkinter.messagebox
import tkinter.ttk as ttk
from tkinter import messagebox as mbox

root = tkinter.Tk()
root.geometry("300x300")
fTyp = [("", "")]
iDir = os.path.abspath(os.path.dirname(__file__))
tkinter.messagebox.showinfo('oxプログラム', '処理ファイルを選択してください')
file = tkinter.filedialog.askopenfilename(filetypes=fTyp, initialdir=iDir)
ffile = file.replace(".csv", "_lets.csv", 1)

with open (file) as f, open(ffile , 'w') as g:

なんかおまじないみたいだが、参考サイトのプログラムをほぼそのまま使わさせてもらった。Pythonでメッセージや何かの入力画面などを表示するのにTkinterというモジュールを使う。一行目でTkinterとファイルダイアログ、メッセージボックスを読み込んでこれらを使ってメッセージとファイル入力用の画面を出力している。選んだファイル名はfileに格納される。出力用のファイル名をファイル名の末尾に”_lets"とつけてffileとしている。

お店と口座を修正

一応、列を入れ替えて基本形はできたので、これをエクセルで開いてお店や口座の情報を整えても使えるのだが、それでは面白くないのでお店と口座もPythonで一気に修正してしまう。
まずは、お店の部分だが、Zaimでデータを出力した場合、同じお店で複数の品を購入したときに、二行目以降のデータが”ー”になる場合と、お店の名前になっている場合がある。後者の場合は修正は必要ないが、”ー”となっているとLet's家計簿で読み込んだときにお店の名前が”ー”となってしまうので修正しておく必要がある。
shoplistという配列を用意し、お店の名前が変わるたびに順番に入れておくようにする。お店の名前が変わったかどうかの判断は一つ前の行のデータをoshopに残しておいて、次の行のデータshopと比較している。ただ、shopが”ー”の場合は同じお店であると判断している。

    oshop = "-"
    shop =""
    shoplist = []

    for row in reader:

        if n != 0:
            shop = row[8]
            date = row[0]
            if shop == "-":
                shop = oshop
            if shop != oshop:
                shoplist.append(shop)
            oshop = shop
        n = n + 1

書き込むところは、nを変数にして、お店が変わるたびにnを更新して、shoplistからお店の名前を書き込んでいる。

for row in reader:

        if n != 0:
            shop = row[8]
            data.append(row[0])
            data.append(shoplist[n-1])
            data.append(row[6])
            data.append(row[10])
            data.append(row[11])
            data.append(row[3])
            data.append(" ")
            writer.writerow(data)
            data.clear()
            if (shop!=shoplist[n-1])&(shop!="-"):
                n = n +1


次は口座になるが、これが一番苦労した。口座に関してはいつも使う口座が決まっているのでプルダウンメニューから選択する形にした。例えば現金で買った場合には現金、カードで買った場合にはカードを選択できるようにしたかった。プルダウンメニューを表示するには、Tkinterのコンボボックスを使う。始めは、お店を1軒ごとに現金かカードなのかというのを選択してクリックする形にしようと考えた。しかし、Tkinterでは何かを入力してその値を使って処理をしようとするとroot.mainloop以降に処理を書かないといけないので、値はいっぺんに入れてしまった方が処理が楽なので、表形式で、何月何日のどのお店、例えば1月1日にセブンイレブンで買ったのは現金払いだったというような感じで入力するようにした。一覧にした時にお店の名前だけでは判断がつかないので日付も表示させるようにした。日付の取得は上のプログラムには書いてないが、お店の名前を取得するときにdatelistという配列にいれてある。
一覧表示には、フレームとグリッドというのを使った。まず、frame = ttk.Frame(root)でフレームを作成し、グリッドを使って日付、お店の名前、コンボボックスを表示している。コンボボックスに表示する選択肢はここでは現金、カード、ICOCAから選択できるようにして、valuelistという配列に入れている。コンボボックスをlist_Items[k]に入れて、row=i+1として一行ずつ並べていく、列は3列目にしている。kとiはループ関数。同じでよいと思うが参考サイトに倣って別々にした。

list_Items[k] = ttk.Combobox(frame,values=valuelist,width=10)
list_Items[k].grid(row=i+1, column=2)

日付、お店の名前も同様にdate_Itemsとshop_Itemsに入れて、1列目、2列目に並べる。そして、一番下にボタンを配置してボタンをクリックすることで入力値が取得できるようにした。def ButtonClicked_Run():以下の部分。得られた値はkozalという配列に格納される。呼び出し関数の最後にroot.destroy()を書いて、ボタンをクリックするとウィンドウが閉じるようにしている。
そして、全体をok_clikという関数にして呼び出している。呼び出しの引数はmでこれはお店のリストの要素数を入れている。

def ok_click(m):
    list_Items = [0]*m
    shop_Items = [0]*m
    date_Items = [0]*m
    frame = ttk.Frame(root)
    frame.grid(row=0, column=0)

    k=0
    N=m

    for i in range(m):

        valuelist = ['現金','カード','ICOCA']
        list_Items[k] = ttk.Combobox(frame,values=valuelist,width=10)
        list_Items[k].grid(row=i+1, column=2)
        shop_Items[k] = ttk.Label(frame,text=shoplist[k])
        shop_Items[k].grid(row=i + 1, column=1)
        date_Items[k] = ttk.Label(frame,text=datelist[k])
        date_Items[k].grid(row=i+1,column=0)

        k+=1

    def ButtonClicked_Run():
        B = [0]*(N)

        for i in range(N):
            B[i] = list_Items[i].get()
            kozal.append(B[i])
        root.destroy()

    button_Run = ttk.Button(root, text='実行', padding=5, command=ButtonClicked_Run)
    button_Run.grid(row=1, column=0)

    root.mainloop()

実行するとこんな感じになる。ハックルベリーはまだ選択していない状態なので空欄になっている。このまま実行を押すと、空欄のままヌルストリングがリストに入る。

f:id:alasixOsaka:20210124100313j:plain
口座選択のプルダウンメニュー

全体のプログラムは次のようになった。

import csv, os, tkinter, tkinter.filedialog, tkinter.messagebox
import tkinter.ttk as ttk
from tkinter import messagebox as mbox

root = tkinter.Tk()
root.geometry("300x300")
fTyp = [("", "")]
iDir = os.path.abspath(os.path.dirname(__file__))
tkinter.messagebox.showinfo('oxプログラム', '処理ファイルを選択してください')
file = tkinter.filedialog.askopenfilename(filetypes=fTyp, initialdir=iDir)
ffile = file.replace(".csv", "_lets.csv", 1)

koza = ""
kozal = []
m=0

def ok_click(m):
    list_Items = [0]*m
    shop_Items = [0]*m
    date_Items = [0]*m
    frame = ttk.Frame(root)
    frame.grid(row=0, column=0)

    k=0
    N=m

    for i in range(m):

        valuelist = ['現金','カード','ICOCA']
        list_Items[k] = ttk.Combobox(frame,values=valuelist,width=10)
        list_Items[k].grid(row=i+1, column=2)
        shop_Items[k] = ttk.Label(frame,text=shoplist[k])
        shop_Items[k].grid(row=i + 1, column=1)
        date_Items[k] = ttk.Label(frame,text=datelist[k])
        date_Items[k].grid(row=i+1,column=0)

        k+=1

    def ButtonClicked_Run():
        B = [0]*(N)

        for i in range(N):
            B[i] = list_Items[i].get()
            kozal.append(B[i])
        root.destroy()

    button_Run = ttk.Button(root, text='実行', padding=5, command=ButtonClicked_Run)
    button_Run.grid(row=1, column=0)

    root.mainloop()

with open (file) as f:
    reader = csv.reader(f)

    n = 0
    data = []
    str =""
    oshop = "-"
    shop =""
    date =""
    shoplist = []
    datelist =[]

    for row in reader:

        if n != 0:
            shop = row[8]
            date = row[0]
            if shop == "-":
                shop = oshop
            if shop != oshop:
                shoplist.append(shop)
                datelist.append(date)
            oshop = shop
        n = n + 1
m = len(shoplist)

ok_click(m)

n=0
with open (file) as f, open(ffile , 'w') as g:
    data.clear()
    reader = csv.reader(f)
    writer = csv.writer(g, lineterminator="\n")
    for row in reader:

        if n != 0:
            shop = row[8]
            koza = kozal[n-1]
            data.append(row[0])
            data.append(shoplist[n-1])
            data.append(row[6])
            data.append(row[10])
            data.append(row[11])
            data.append(row[3])
            data.append(koza)
            writer.writerow(data)
            data.clear()
            if (shop!=shoplist[n-1])&(shop!="-"):
                n = n +1

        if n == 0:
            data.append(str)
            writer.writerow(['日付','お店','内容','収入','支出','費目','口座'])
            n = 1
            data.clear()


参考にしたサイト
PythonのTkinterを使ってみる - Qiita
PythonでCSVファイルを読み込み・書き込み(入力・出力) | note.nkmk.me
Python:処理ファイルをGUIから選択する方法 - Qiita
PythonGUI(tkinterコンボボックス)で行列を作成 - Qiita
ボタンを使って Tkinter ウィンドウを閉じる | Delft スタック

RayWayのバックパック制作 その2

前回、RayWayのバックパックが到着してさっそく制作にかかって少し進んだところまで書いた。

 

 

alasixosaka.hatenablog.com

 

今回はその続き。と言っても大して進んでいない。

とりあえず、ショルダーベルトの片側まで進んだ。

リペアで失敗。作業は慎重に。

前回作ったベルトに、こちらも前回きり抜いたショルダーパッドを入れる生地を縫い合わせる所から開始したが早速ミスった。

上糸の調整が甘かったらしく下糸が絡まってしまいワークが先に進まなくなった。ミシンを止めてワークを取り出そうとしたが糸が絡まって動かない。仕方ないのでリッパーを使って絡まった糸を切ろうとしたが、勢い余って生地を切ってしまった。前回慎重に切り出した生地がいきなりぱあになってショックだった。

 

f:id:alasixOsaka:20210111181106j:plain

勢いあまってリッパーで生地をバッサリ切ってしまった。

気を取り直して、絡まった原因を直すところからやる。以前、スタッフザックを作った時の余った生地を取り出して、試し縫いして調整することにした。始めからやっときゃ良かったと後悔しても後の祭り。幸い生地は、かなり余裕があるので何回かは失敗できる。

調整して見ると上糸の調子が強すぎる様なのでダイヤルを右に回してメモリを7~8くらいに調整すると良くなった。針は16番、糸は#20を使っている。生地の厚みは触った感じだがザック用のと大体同じ。材質もナイロン地なのでこんなもんでいいだろうと思い、作製を再開。時々引っ掛かる事があるが完全に絡まる事はなくなった。

ベルトを縫い付け終わると、もう一枚同じ形の生地を重ねて縫い合わせる。ズレないように仮縫いしてから縫い付けた。

 

f:id:alasixOsaka:20210111181315j:plain

ウレタンフォームを入れる生地を縫い合わせる。ずれないように仮縫いしてからミシンで縫った。

余分な縫い代を切ったら、ウレタンフォームを型紙通りに切り取って中に入れる。中に入れるとフォームを下まで目一杯下げる。しかし、フォームのサイズがギリギリでいくら引っ張っても動かない。生地の上の口とフォームの上端が1インチと言う指定になっているが3/4インチしかない。このままでは口を閉じる時に問題になるかも知れないがとりあえずこのままにして、もう一つのショルダーベルトを作る事にした。

 

f:id:alasixOsaka:20210111181447j:plain

とりあえずウレタンフォームを入れたところ。本当はもっと下まで押し込まないといけない。

それにしてもショルダーベルトの幅がかなり細い。ウルトラライトという事なのでこういう所も軽量化を図っているのかも知れないが、背負う時に負担にならないか少し心配。

今日はこれでお終い。この調子だといつになったらできることやら。気長にやるしかない。

 

RayWayのバックパックがやって来た。

キャンプ用品を買い揃えているところで、軽量のバックパックが欲しくなった。はじめに目をつけたのは山と道のミニだった。

www.yamatomichi.com

しかし、値段が2万円程とちょっとお高い。そこで自分で作れるザックとしてRayWayのザックはどうかと思っていた。結構作るのに大変そうだと思いつつ、最近はMYOGを始めてミシンの扱いにも慣れて来たところなので思い切ってチャレンジして見ることにした。RayWayのザックだと値段は1万円程。日本までの送料込みで1万3千円程だった。実はこれは家内からの誕生日プレゼントに頂いた。まだ誕生日には少し早いが、昨年のクリスマス前に注文して昨日届いた。

www.rayjardine.com

早速中を開けて見ると、生地、ウレタンフォーム、いろいろな幅のテープ、ゴム紐、プラスチックパーツなどが入っていた。

f:id:alasixOsaka:20210111175455j:plain

RayWayバックパックキットの中身。キットと言っても生地などは自分で切る必要がある。

そして、分厚いマニュアル。全部で24ページもある。勿論全部英語。最後の方は型紙なので実質は20ページもないのだが、それでも全部読むのはくたびれる。そして、マニュアルの冒頭に詳しい作り方をSNSYoutubeなどにアップすることは控えてというような事が書かれている。キットの中身を見ればなるほどとうなずける記述だ。なんせマテリアルは生地などを必要量だけ切っているだけ。マニュアルに従って型紙通りに切って使う必要がある。逆に言うとマニュアルさえあればマテリアルを自分で用意して作る事が出来る。だとすると作り方がソーシャルメディアにアップされる事は商売に関わることになる。そして、キットを友達とシェアするのも控えてと書いてある。それもそうだマニュアルを回し読みされたらそれも売り上げに関わる。

ただ、自分のマニュアルをコピーしてはいけないとは書いてない。その辺はCDの著作権なんかと同じ考えて方なのかな。あくまで個人で利用するぶんには複製しても良いという事だと解釈しておく事にした。ところがマニュアルのサイズが見たこともないサイズで細長い。幅はA4よりも少し広く、アメリカで良く使われるレターサイズと同じと思うが、レターサイズだと長さはA4より短い。しかしこいつはA4よりもはるかに長い。家庭用によくある複合機だと対応できないサイズ。コンビニとか行けばコピーできそうだけど。

だが、我が家には買ったばかりのScanSnapがある。ScanSnapなら長い原稿もラクラクスキャン出来る。

 

alasixosaka.hatenablog.com

 

心配だったのは幅がA4より少し広くて入るかという事だったが、ギリギリ何とか通す事が出来た。スキャンついでにOCRにかけて翻訳してみたが予想通りと言うか、ちゃんと読める日本語にならず。わからないところは辞書を引きながらやった方が良さそうだ。と言う事でコピーはバックアップにしかならなかった。

という事でこのブログでも詳しい作り方は書かないでおく。ただ、苦労した事やマニュアルに書いてないポイントなんかがあれば備忘録として書いておきたいと思う。

このキットを作って見て、少しアレンジして別のを作って見たいと思うか、これで大満足で別のはいらないと思うか、それともこんなしんどいのは二度と御免だと思うか、やって見ないとわからない。

とりあえず制作にかかることにする。

まずはフロントとサイドに使う分厚い生地を型紙に沿って切り出す。型紙がなくサイズが指定してあってサイズ通りに切り出すパーツもある。アメリカ製なのでサイズは当然インチ表示。

このザックを買おうと思ったきっかけになったからあげ隊長のブログにはインチメジャーがついていたと書いてあったが、自分のキットにはついていなかった。

karaage.info

経費削減でつけなくなっのだろうか? でも幸いな事に家には何故かインチメジャーあった。表が普通のメートル法のメジャーで、裏がインチメジャーになっている。多分何処かでもらった物だと思うが普通の日本の家庭でインチで測る事は無いので裏側は使う事がなかったがついに出番がやって来た。

まあ、1インチは約2.54センチなので電卓で換算すればインチメジャーなしでも作業はできるが、インチで指定された箇所がしょっちゅう出てくるのであった方が作業がはかどるのは間違いない。

ショルダーベルトの作製

切り出し作業がおわると次はショルダーベルトの作製。ベルト用のナイロンテープを指定の長さに切って縫って行く。ここでもインチメジャーが大活躍。ベルトは生地が厚いのでミシンの針を16番に交換し、糸も太め#20にした。糸は番号が大きいほうが細い。通常は#60を使っている。糸は#30でも良かったかも知れない。丈夫さと太さは必ずしも比例しないので単に太ければ良いというものでもない。裁縫は初心者なのでどのメーカーの何が良いかわからないのでその辺は適当にやって様子を見るしかない。

ショルダーベルト作製の途中で疲れたのでこの日はここで作業終了。疲れて来ると作業が雑になるのでコツコツと少しずつ作業する事にする。

ScanSnapがレシートの整理にとっても便利

年末に長年使ってきたやさしく家計簿が実質使えない状態になった。

 

alasixosaka.hatenablog.com

 

やさしく家計簿はスキャナーでレシートを読み取ってOCR機能で解読して分類してくれる機能がすごく便利でずっと使ってきた。ただ自分の場合、ネットバンキングやクレジットカードの利用データはパソコンからダウンロードしてLet's家計簿という別のソフトに取り込んでいるので最終的にやさしく家計簿のレシートデータもエクスポートしてLet's家計簿に取り込んでいた。ところがどういう訳かやさしく家計簿からエクスポートができなくなった。再インストールしても症状が変わらずwindows側のアップデートが原因と推定した。やさしく家計簿のサポートが終了してしまっているので改善が見込めないため、ソフトを乗り換える事にした。

ネットで検索した所、ScanSnapと言う富士通製のスキャナーに付属のScanSnap Homeと言うソフトが使えそうだったのでScanSnapを購入した。少々値段が張るので失敗した時のリスクが大きいが、スキャンのところも面倒に感じていたので思い切って購入した。

買ったのはix100という機種。wifi対応でワイヤレスで使う事ができ、クラウド連携も対応。もう少し廉価なS1100という機種もあったがこちらはUSB接続のみでクラウドには非対応。どちらにしようか迷ったがワイヤレスの方が便利そうなのでix100の方にした。結果的には大正解だった。理由は後で詳しく書く。

 

富士通 スキャナー ScanSnap FI-IX100A

富士通 スキャナー ScanSnap FI-IX100A

  • 発売日: 2015/02/06
  • メディア: Personal Computers
 

 

晦日にアマゾンで発注して1/2に到着。正月というのに迅速な配達で本当に助かる。正月休みの間にじっくりとさわる事が出来る。

充電式なのでまずは充電から。初回の充電は結構時間がかかった。充電終了を待って、パソコンとScanSnapを接続。この時はUSBで接続する必要がある。次にScanSnap Homeをダウンロードしてインストールする。ここでwifiの設定をしておくと、ワイヤレスで使えるようになる。

早速レシートを読み込んでみる。

レシートの読み込みはとても簡単。レシートをスキャナーの読み込み口にセットしてパソコンからSCANボタンをクリックするだけ。ScanSnap Homeが自動的にレシートかどうか判断して処理してくれる。一旦画像ファイルとして読み込み、後で手動で処理する事も出来る。

レシートの読み込みの簡単さには感動した。それまでのやさしく家計簿ではレシートを複合機のスキャン面に並べて黒い紙を被せて、蓋を閉めてスキャンするという手順だった。A4サイズまでスキャンできるので一度に複数枚のレシートをスキャンできるのだが、スキャンするときにレシートどうしが重ならないように気をつけないといけないし、紙を被せるとき、蓋を閉めるときにレシートが動いて結局重なったりしてイライラする事もしょっちゅうあった。おまけに家内はレシートをくしゃくしゃに折り曲げて持って帰って来るのでいちいちしわを伸ばさないといけない。それに比べるとScanSnapだと皺は一応伸ばす必要はあるものの、複合機のスキャナーに乗せるのに比べると多少折り曲がっていてもスキャンする面さえちゃんと読める状態にしておけばスキャンしてくれるし、一枚ずつしか処理できないがスキャナーの台に並べるよりも遥かに手間が少ない。さすがは専用機というところ。

ScanSnap Homeは明細の処理ができない。

ScanSnapの読み込みの便利さに感動したのも束の間、ScanSnap Homeのレシート処理機能では明細が出てこない事がわかった。お店、日付、トータル金額が表示され分類してcsvファイルにエクスポートしてくれるがこれだけでは不十分。食品とか雑貨などに分類ができないと支出の管理に使えない。なのでScanSnap Homeのレシート機能は自分的には却下となった。

f:id:alasixOsaka:20210109102049j:plain

ScanSnap Homeで読み取ったレシートをCSVで出力したが明細が表示されない。

OCRはどうか?

ScanSnapにはOCRソフトがついて来るのでOCRでレシートを解析できないかやってみた。やり方は、JPEGの画像形式でレシートを読み込み、ScanSnap Homeのホーム画面で該当のデーを右クリック、アプリケーション連携からExellに変換を選択するとエクセルファイルに変換してくれる。WordやPower Pointにも変換可能。

しかし、と言うかやっぱりと言うかレシートには対応してないので、エクセルで読み込んで見たが行や列がバラバラで相当手間をかけないとLet's家計簿に読み込める形にならない。その上、読み取りミスも多く、せっかくレシートの読み込みが楽になったのに別のところで手間が増えてしまう。

f:id:alasixOsaka:20210109102630j:plain

ScanSnap付属のOCRソフトで読み込んだが、認識率は今一つ。

一応、OCRで読み取ったデータをエクセルに読み込み、成形した上で、ScanSnap Homeのレシート読み込み機能で作成したエクセルシートに展開すればできないこともない。しかし、手間が多すぎてやる気にならない。

困った、これでは高いお金をかけて買ったScanSnapが無駄になる。

アプリとの連携はどうか?

ScanSnapはいろいろなPCソフト、アプリと連携して処理が可能。ただ対応しているのは弥生会計とかプロ用のが主体。個人向けだと対応しているのはDr.WalletかZaimという事になる。

どちらも基本はスマホ用のアプリ、Android用とiPhone用があり、有料版と無料版がある。

結論からいうと自分の場合、Zaimの無料版で十分だった。

Dr.Walletはオペレータが読み取ったデータを手で入力してくれる。手書きの領収書などもオペレータが読み取って入力してくれるらしい。ただし、レシートの明細を入力してもらうには有料版でないとだめらしい。しかも値段は月当り¥600。これを高いと感じるか安いと感じるかは個人によって異なるだろうけど自分的にはそこまでお金はかけたくない。無料版ならできることはScanSnap Homeのレシート機能と大差ないし、使うなら有料版でないと意味がない。他に手段が無ければ有料版を使うかも知れないが。Dr.Walletの有料版はとにかく楽して家計簿をつけたい、そしてこれオンリーで完結したいという人には良いと思う。自分の場合、最終的にLet's家計簿に取り込むので、Dr.Walletの有料版はオーバースペックだった。

自分的にはZaimの無料版がベスト

もう一方のZaimは連携がパソコン版のScanSnap Homeではなく、スマホ用アプリのScanSnap Connect Applicarionを使っての連携になる。

ここのサイトを参考に手持のタブレットにインストールして使って見た。

rikumalog.com

ちなみにタブレットのメーカーはteclastと言う中華製。でもチャント動いている。

Zaimを起動してレシートの読み取り画面に移動し、歯車ボタンをタップすると、ScanSnapのアイコンが出てくるのでタップする。

 

f:id:alasixOsaka:20210109104318p:plain

Zaimのレシート読み取り画面で歯車をタップするとScanSnapのアイコンが現れるのでタップする。カメラの画像は関係ありません。

するとScanSnap Connect Applicarionの読み取り画面が立ち上がるのでレシートを読み取らせる。するとZaimの画面に戻って読み取り結果が表示される。

 

f:id:alasixOsaka:20210109104516p:plain

Zaimでレシートを2枚読み取ったところ

結果はレシート毎にまとまっているので、タップすると詳細が表示される。

f:id:alasixOsaka:20210109104654p:plain

タップして詳細を開いたところ

このようにちゃんと詳細が読み取られている。修正が必要ならこの画面で修正できる。修正したら保存をタップすれば先ほどの画面に戻る。

 

注意しないといけないのは、レシートを連続で読み込む時に途切れることなく次々に読ませる必要があること。少しでも途切れると読み込みが終わったと判断される。この辺はScanSnap Homeでは継続か終了かボタンをクリックして選べるようになっていて使い勝手が良い。Zaimの方も改善してもらいたい点だ。有料版ならレシートの連続読み取りに対応しているということも書いてあるので、ひょっとすると有料版なら同じような操作ができるのかも知れないが試していないのでわからない。

ちなみにZaimの有料版は広告非表示、オンラインバンキングなどの連携などが利用可能になる。また、レシートの詳細費目についてもより細かい指定が出来るようになる。

つまり、Zaimの方もこれ一つで完結したいという人には有料版がおすすめということになる。

ただ、自分の場合、オンラインバンキングのデータはLet's家計簿に取り込むし、レシートの詳細費目についても、結局Let's家計簿に取り込む時に指定するのでZaim上では必要ないのでやはり有料版はオーバースペック。Zaimの無料版の嬉しいところは、詳細費目に対応しているところ。これが無料で本当に助かった。

Zaimに取り込んだデータをLet's家計簿に取り込むには、まずパソコンのブラウザーでZaimのHPに行き、自分のアカウントでログイン。右上の設定をクリックするとメニューが開くのでファイル入出力をクリックする。

f:id:alasixOsaka:20210109105307j:plain

右上の設定をクリックし、赤丸のファイル入出力をクリック。

すると入出力の画面が開くので、「Zaimの記録データをダウンロードする」をクリック。

f:id:alasixOsaka:20210109105623j:plain

Zaimの記録データをダウウンロードする。

すると期間を指定する画面が現れるので、ScanSnapで読み込んだレシートの期間を指定すればデータがエクスポートされる。文字コードはShift-JISを選んでおけばOK。

f:id:alasixOsaka:20210109105900j:plain

期間を指定してエクスポートする。

データはCSVファイル形式になっているのでエクセル等のソフトで開くことができる。

f:id:alasixOsaka:20210109110038j:plain

エクセルでエクスポートしたCSVファイルを開くことができる。

Let's家計簿に取り込むためには、エクセルのシート上で形式を整える必要がある。と言っても、必要なデータは口座以外は揃っているので、不要な列を削除し、列を少し入れ替えるだけなのでたいして手間はかからない。

Let's家計簿に取り込むには、各列を左から順に、下のようにして、1行目にこのタイトルを入れておく。

日付 お店 内容 収入 支出 費目 口座

 あとは、Zaimのデータをこの順に貼り付けていけばよい。これを適当な名前を付けてCSVファイルとして出力してやれば読み込みができる。面倒ならマクロを作っておけば一発で変換できる。自分はPythonで書いて見ようと思っている。いつになるかわからないが。

 

と言う事でZaimの無料版を使う事で我が家の家計簿問題は解決した。

レシートを読み込んでZaimに記録してこれだけで完結させたい場合は有料版が良いかも知れない。

今年の走り初め

コロナに明け暮れた2020年が終わり、2021年になりました。今年もコロナとの付き合いは続きそうですが、早く収束することを願うばかりです。
さて、年明け早々に、近所の林道をトレイルランしてきました。走ったのは昨日でしたが、昨日はつかれてブログを書く気にならず、翌日の今日執筆しています。
走ったのは、自宅のから山の方に向かってグルーっと回る30㎞。電車やバスで移動せずにトレイルを走るコースを検討して走ってみました。いやー家の近所に山があってよかった。
まずは、自宅から阿武山の方に向かいます。奈佐原古道から登山道に入り、最後の山頂への分岐を山頂方面に向かわず、直接変電所に向かった。

f:id:alasixOsaka:20210103140324j:plain
今日は山頂には向かわず変電所の方に直接抜けた。
f:id:alasixOsaka:20210103140509j:plain
阿武山側から変電所を望む。今日はいい天気。

変電所前からしばらくバス道を走って、武士自然歩道の入り口から再びトレイルを走る。

f:id:alasixOsaka:20210103140657j:plain
武士自然歩道を走る。

しばらく走ると林道にぶつかるが、自然歩道をまっ直ぐ行く。

f:id:alasixOsaka:20210103140819j:plain
林道車作線にぶつかる。
f:id:alasixOsaka:20210103140856j:plain
武士自然歩道はこの階段を登る。

しばらく行くと、降りてくるおじさんに出会った。なんでも、この道は初めてらしいが、途中まで行って険しいので引き返してきたとのこと。滝まで行ってみようかと思ったが引き返してきたらしい。滝(龍泉の滝)までどのくらいかと聞かれたので、歩いたら多分1時間くらいかかるだろうというような話をした。別れ際にみかんをもらった。なんでも自宅で取れたみかんとのこと。高槻でもみかんが取れるんだと思って感心した。

f:id:alasixOsaka:20210103141205j:plain
武士自然歩道は険しいところはこのように階段が整備されている。
f:id:alasixOsaka:20210103142537j:plain
林道から変電所方面を望む

しばらく行くと、今度は龍泉の滝から来る林道にぶつかる。ここで家族連れの人たちと出会う。お正月から家族連れでハイキングとはアクティブなご家族だ。
もうしばらく行くと、萩谷方面に向かう分岐にでる。ここらへんで10㎞になったので小休止。ブラックサンダーと羊羹を食べる。今日はドリンクとして、梅麦茶を持ってきた。前にも書いたように、最近は甘くないドリンクを試しているところ。
alasixosaka.hatenablog.com
前回は、塩梅水を試してみて結構いける感じだったが、今回の梅麦茶の方は、お味の方はもう一つかな。甘くないことは甘くないが、個人的にはもう少し酸味があった方が飲みやすい感じがする。今度はクエン酸を少し足してみようかと思う。
ここで、萩谷の集落に向かわず、道を北の方に取る。道端には雪が残っていて、年末に降ったのが残っているようだ。

f:id:alasixOsaka:20210103143744j:plain
道端に雪が残っていた。

しかし、この道は失敗だった。始めは道があったが、沢にぶつかるところで道がなくなった。と、沢の向こうに動くものがある。始めは人かと思ったがかなり急な斜面をはやい速度で駈け上っているので人にしては動きが早すぎる。今日は眼鏡をかけてこなかったので遠くがぼんやりしか見えず、よくわからなかったが、サイズから言うと猿だったのではないかと思われる。
ともかく、沢を渡っても道がないので、ピンクのマーキングを頼りに、沢を降りて川沿いに出る。マーキングは川沿いに続いているが、相変わらず道らしきものはない。正月早々道を見失ってしまい、どうしようか悩むが、もう少し川沿いを進むと林道のようなところに突き当たりそうなので、頑張って進む。と、ようやく林道に出る。

f:id:alasixOsaka:20210103143919j:plain
なんとか林道に出る。

Ride with GPSでOpen Outdoor Mapを使ってルートを引いたが、来た道は廃れた道になっているようだ。川沿いは昔田んぼがあったような段と石垣があり、田んぼがあったころは作業用に道があったに違いない。それが田んぼがなくなったので道も廃れてしまったものと思われる。
ようやく道に出たので、更に川沿いを進む。この辺りは田んぼがあるので作業用に道が残っているのだろう。そして、萩谷から登ってくる林道に合流。あまり冒険的なルートは取らない方が良いと反省した。

f:id:alasixOsaka:20210103144412j:plain
萩谷からやってくる林道に合流。

しばらくは、去年の夏に走った林道を走る。途中の分岐をいくつか過ぎて、本日の折り返し地点金毘羅山手前の分岐に到着。

f:id:alasixOsaka:20210103144554j:plain
途中、いくつかこのような分岐がある。
f:id:alasixOsaka:20210103144745j:plain
ようやく折り返し地点。

15㎞過ぎていたので、ここでまた小休止。ブラックサンダーと福豆、エナジージェルを摂取。福豆は去年の節分の頃に買ったやつ。カロリーがあって行動食に良いかと思って買ったがのどが渇くので結局あまり食べていない。まだまだ残っている。
ここから右手に折れて、林道をひたすら下る。始めはちゃんと舗装されていて快適に走れたが、すぐに道が荒れだして、やがてこぶし大の岩がごろごろするガレた道に変わった。それでも何とか我慢して走っていたが、足が痛くなって我慢できずにスピードを緩める。この辺りから、アキレス腱と古傷の右の股関節が痛み始めた。下りを頑張りすぎるのはやっぱり足に負担が大きい。股関節の痛みの方は、どうもタイツが下にずれているのも原因のようだ。タイツをC3fitのElevation Airに変えてからこんなことはなかったのだが、コンプレッションが緩くなってきたのか、足が細くなったのか? とりあえずタイツを引き上げると痛みは幾分ましになった。
しばらく行くと、今度は完全に崩れたところに出た。

f:id:alasixOsaka:20210103150211j:plain
土砂崩れで道が塞がれていた。

向こうでモーター音がするので、しばらく待っていたら、オフロードバイクに乗った人が崩れたところを越えて来た。ちゃんと挨拶してくれたマナーは悪くないが、本当は車両は通行禁止のはずだが。
しばらく行くとゲートがあった。なんと、車両だけでなく歩行者も通行禁止。まあ、あれだけ崩れていたら当然か。でも反対側には何の表示もなかったけど。

f:id:alasixOsaka:20210103150456j:plain
ゲートを振り返ってみたところ。なんと、歩行者も通行禁止。
f:id:alasixOsaka:20210103150814j:plain
ゲートのところは原大橋バス停への分岐。上萩谷に向かう。

ゲートの先は快適な林道になって走りやすくなったが、疲労が出始めていてスピードが出ない。いつもだいたい20㎞くらいでくたばる。何とかならないものかといつも思ってしまう。
しばらく行くと岩井谷への分岐に出る。

f:id:alasixOsaka:20210103151009j:plain
岩井谷への分岐

ここがほぼ最後の登り。もう全然走れない。ヘロヘロになって下りてくると、上萩谷に向かう林道に合流。

f:id:alasixOsaka:20210103151342j:plain
上萩谷に向かう林道へ合流。

そして、22㎞過ぎでようやく上萩谷の集落に到着。ここまで約3時間半。思ったよりも時間がかかってしまった。
集落の入り口で、また、小休止。集落の犬がうるさく吠えて落ち着かないが、一本満足バーを食べて、アキレス腱と股関節の痛みがまだあるので、ここでロキソニンを飲む。また、梅麦茶がなくなったので、ウルトラミネラルタブレットを水に溶かしてドリンクを作る。しかし、このウルトラミネラルタブレットも自分的には今一つ。甘くないのだけれど炭酸のシュワシュワ感があって、飲みにくいうえに味も今一つ。コスパはいいのに惜しい。
一応今のところは塩梅水が一番よさそう。

f:id:alasixOsaka:20210103152003j:plain
上萩谷の入り口で、補給とロキソニンを摂取。

もう、本当に走る気力が失せかけているが、後は下って帰るだけなので最後の力を振り絞る。
中萩谷からバス道を外れて、東海自然歩道に入り、総合運動公園の方へ向かう。元々の予定はバス道を走って帰る予定だったが、少しでも距離を短くしようと思い、ショートカットすることにした。また、時間はもう2時を過ぎていたがまともなものをまだためていないので、運動公園で持ってきたカレーメシを食べようと思った。お湯は山サーモスに入れてきた。少し重さがあるが、すぐにお湯が注げるのはメリット。
運動公園のサッカー場の脇で遅めの昼食。ついでにトイレも済ませようと思ったが、サッカー場のトイレは閉まっていた。仕方ないので家まで我慢することにした。

f:id:alasixOsaka:20210103152317j:plain
総合運動公園で遅めの昼食。今日はカレーメシ
f:id:alasixOsaka:20210103152443j:plain
ついでにおじさんにもらったミカンを食べる。

ここまでで、24㎞。あと5-6㎞で家に着けると思って頑張る。
最後は本当にスロージョグ程度のスピードしか出せない状態でなんとかゴール。というか、初めからこのくらいのペースでスピードを抑えておけばよかったのではと思ってしまった。なんせ、1㎞-2㎞のラップが5分台でロングランにしては早すぎると思ってスピードを緩めたが、やっぱり前半で頑張りすぎたのが悪かったみたいだ。

年の瀬にいろいろ壊れる

2020年もいよいよお終いですね。
今年は、コロナコロナで一年振り回された感じで、やりたいことも思うようにできなかった。
大峯山にも3回くらい行こうと思っていたが、結局行けたのは1回だけ。東海自然歩道もあまり進めず。自転車のイベントはことごとく中止になり、トレランもイベント中止が相次ぎ。
いいことはあまりなかったなあ。
そして、今日は大晦日ですが、またよくないことが起こってしまいました。

ダイソン掃除機のバッテリーが死亡

我が家の掃除機はしばらく前から、ダイソンのコードレスタイプを使っています。SVー10とかいうやつ。
始めはコードレスなんてどうせ吸引力も弱くて使いえないのではと思っていたが、こいつは吸引力はコードつきとほぼ変わらず、時間も1回の掃除なら問題ないくらい使える。
それに、何といってもうっとうしコードがないので取り回しが断然楽。ということで、最近はコードレスばっかり使っていた。
しかし、少し前からバッテリーの調子があまりよくなかった。充電しても、残量系の表示が増えていかずに途中で止まったり、またいつの間にか再開していたりしていて、もうダメかなと思っていた。
でも、使えることは一応使えたし、使用時間も特に短くなっていたわけではなかったので、だましだまし使っていたが、大掃除の最中に赤いランプが点滅して全く充電できない状態に。掃除はあらかた終わっていたので大きな被害はなかったが、まさかこの大晦日にきて壊れるとは。
新しいのと交換しないといけないのですが、純正品を買うと、他社の安いコードレス並の値段がするので、サードパーティー製の安いのを買うことにした。
アマゾンで検索すると山のように出てきてどれにしたらよいか迷うが、一応サムソンの電池使用とかいてあるこいつにした。

しかし、アマゾンは年中無休で正月も配達してくれるらしい。本当にありがたい。昔だったら、こんな時に壊れたら正月にお店が空くのを待ってから行かないといけなかったのに、ネットで注文してみんなが休んでいるお正月に配達してくれるなんて。配達の方も本当にご苦労様です。

そして、もう一つ。

家計簿ソフトが動かなかくなった。

家計簿ソフトは、やさしく家計簿というのと、Let's家計簿というのを2つ使っている。やさしく家計簿の方は、レシートをスキャナで読み込んでくれるソフトで、重宝していた。
自分の場合、やさしく家計簿でレシートをスキャンしてデータをCSVファイルに書き出し、Let's家計簿に取り込んで使っている。Let'sに取り込むときにフォーマットを変換する必要があるが、それはエクセルのマクロ機能を使えば一発でできるのでソフトを2つ使い分けるためひと手間かかるがレシートをいちいち打ち込むことに比べたらはるかに楽なのでこの方法を使っていた。最終的に家計簿としてLet's家計簿を使っているのは、シェアウェアで値段が安いということと、ネットバンキングやクレジットの利用履歴の取り込みが楽という点が大きい。以前はマイクロソフトのMoneyを使っていて、大手の銀行やクレジット会社が軒並みMoneyに対応していたので非常に助かっていたが、Moneyもマイクロソフトがやめてしまって、代わりのソフトとしてLet's家計簿を使っている。
そして、今日になってやさしく家計簿の一部の機能が使えなくなった。
正確にいうとソフトが壊れたわけではなさそうで、どうもWindowsがアップデートされて対応しなくなったみたい。具体的な症状はスキャンはできるが、取り込んだデータをCSVファイルに書き出すところが使えない。そこに行こうとするとエラーが起きてソフトがダウンしてしまう。再インストールしても症状が変わらないので、Windowsの方の問題だろうと思った。しかし、このソフト既にサポートが終了していて、アップデートが期待できない。ということは、これからは使いないということになる。しかし、今日取り込んだデータだけでも何とかしたいと思い、古いパソコンを引っ張り出してきて、Windows7で動かしてみた。すると問題なく動く。
でも、家計簿つけるときだけいちいち古いパソコンを引っ張り出してくるのもなんだかなあ、という感じだし、古いパソコンということはこっちもいつ壊れるかもしれずという危険があるので、家計簿ソフトも乗り換えることにした。といってもなかなか同じようなソフトは見当たらない。みなさんレシートの整理はどうしているのかな。スマホで写真撮ってアプリでってかんじなのかな。これは一回やってみたが辛気臭くてとてもやってられんと思ってすぐにやめてしまった。そのあと、やさしく家計簿を使い始めてなんて楽なんだろうと思った。しかし、また別のソフトに乗り換えないといけない。ああうっとうしい。
色々探すと、富士通のスキャナについてくるScanSnap Homeというソフトが使えそうな感じ。こいつは家計簿ソフトではないが、読み取った結果を整理してCSVファイルに書き出す機能があるらしい。後はスキャナ自体が、スマホの家計簿アプリに対応しているようなので、アプリで読み込んでCSV出力という手も使えそう。まあ、スキャナに使っていたのがCanonのパソコン用のプリンター複合機で、スキャンが微妙に面倒くさいと思っていたところなので専用スキャナも悪くないかなと思っていたところ。年末に色々出費があるのは痛いがまあ仕方がない。ということで、こちらを購入。

富士通 スキャナー ScanSnap FI-IX100A

富士通 スキャナー ScanSnap FI-IX100A

  • 発売日: 2015/02/06
  • メディア: Personal Computers
どんな感じなのかはまた使ってみて書いてみたいと思う。

MYOGでサコッシュを作る。

先日作ったグランドシートの材料のタイベックが余っているのでサコッシュを作ってみた。

 

 

alasixosaka.hatenablog.com

 

タイベック以外の材料も同じくアウトドアマテリアルマートで購入。

購入したのは防水のファスナーとナイロンのテープ。ついでに20dのシルナイロンも購入。実はこれは後で使う事になる。

 

1つ目はサイズを間違えて失敗

サイズは山と高原地図が丁度入るサイズにしようと20×15cmとした。作製にあたってはこちらのサイトを参考にした。

 

www.bepal.net

まずは生地を切り出す。サイズは縫い代込みで22×34cm。

次にファスナーをバラバラにして上下に縫い付ける。

防水ファスナーには表裏があって、ツルツルした方を外側になる様につけるらしい。

ところがその向きにつけようとするとスライダーの取っ手が内側に来てしまう。一緒に買ったものなので買い間違いということはないはずだが、スライダーを外側に向けようとすると、ツルツルした面は内側になる。反対向きだとスライダーが絶対に入らない。仕方無いので今回はツルツル面を内側にして縫い付けた。

f:id:alasixOsaka:20201230205704j:plain

ファスナーをばらして縫い付ける。しかし、表裏が逆でないとスライダーがはまらなかった。

 

 

ファスナーを縫ったらスライダーを付けて筒状にする。

f:id:alasixOsaka:20201230205913j:plain

スライダーをつける。

次に両サイドを縫う。この時、紐を通す取っ手になる部分として4cmに切ったナイロンテープを二つ折りにして一緒に縫い付ける。

 

f:id:alasixOsaka:20201230210011j:plain

両サイドを縫う。袋の上部(写真の右手)にナイロンテープを縫い込む。

次に形を整えるために底の部分を縫う。

次にマチをつけるために下から2cmを折り返し両サイドの縫い目の所と両端からその縫い目までを縫い付ける。

 

f:id:alasixOsaka:20201230210210j:plain

マチをつける。縫うのは写真右下の右から2cmと下から1cm。反対側も同様に縫う。

ここ迄できればほぼ完成。内側と外側をひっくり返して形を整えるために上の部分を縫う。参考サイトではサイドをパイピングして補強しているが、タイベックはそもそも丈夫なので必要ないと思って省略した。

後は肩紐を通せば完成。肩紐は2mmのパラコードを使う予定。アマゾンで注文したがまだ来てないのでとりあえずここまで。

f:id:alasixOsaka:20201230210447j:plain

とりあえず形はできた。が、この後失敗に気づく。

と思ったらここで山と高原地図が入らない事に気づく。いや正確には入るには入るがサイズがピチピチでスムーズに出し入れできない。20cmはギリギリ過ぎたようだ。

 

f:id:alasixOsaka:20201230210803j:plain

山と高原地図をスムーズに出し入れするには小さすぎた。

シルナイロンで少し大きめに再チャレンジ

タイベックで作った20×15cmのサコッシュ山と高原地図を入れるには少し小さいので、もう少し大きくして参考サイトと同じ25×20cmのをもう一つ作ることにした。生地は今度はシルナイロンを使った。特に理由がある訳でも無いがタイベックを買うときに一緒に買ってあったので使って見る事にした。

詳しい制作過程はなし。作るのに夢中で写真を撮り忘れてしまった。シルナイロンはつるつる滑るのでタイベックに比べると扱いが多少難しい。また、折り目がつかないので、折り目をつけるときにはアイロンを使った。

防水ファスナーを使ってしまったので、ファスナーは普通のものを近所の手芸店で買ってきた。

こっちの方はサイドにポケットを付けて見た。別に難しい事はなく27×17cmの生地を外側に縫い付けるだけ。ポケットは上部を1cm幅で三つ折りして縫い付け、ポケットと本体はマジックテープどめにした。

f:id:alasixOsaka:20201230210845j:plain

今度は問題なく出し入れできる。手前側にマジックテープ止めのサイドポケットを付けてみた。

サイズとしたら、2つの中くらいが良いのかもしれない。まあ、一度使ってみてから考えてみよう。