懸案だった gnucash への csv import の続き。
あるアカウントに対する transaction として csv ファイルを読み込めて、日付、説明、入出金額は読み込めているのだが、相手アカウントの渡し方がどうにも不明
Grisbi という別の複式簿記アプリも見つけて、こちらは gnucash よりちょっといい感じなのだが、やはり import が不完全…。 gnucash と違って export もできていい感じだったんだがなぁ。ってデータの export ができない gnucash が問題すぎる気がするが。
結局あれこれ弄っているうちに csv ではなく qif を吐くように python のコードを直してしまったわけだが…。
それでも gnucash ではちゃんと読めたが、 Grisbi だと transfer を transfer として読んでくれなかった。
手元の pda で過去10年分ちかい家計簿が見れると、日記、予定表と並んで 何をやっていたのはいつだったかの非常に重要なデータになるので、この参照性は 確保したいなぁ
そんな訳で、手修正も含めて、とりあえず今年1月からの分は gnucash に取り込んだが…。もっと古い方はどうするかな…。 gnucash に取り込んでも export できないんじゃ行き止まりだなぁ…。
gnucash で import する csv ファイルに必要なカラム
日付、説明はそのままの意味、入金、出金はそれぞれ額を書く(入金はその額が入り、出金はその額が出る)。
適用するアカウント(勘定科目)はcolumnを割り付けた後に指定するが、
入金・出金の相手は指定できない(全部貸借不一致になる=資金移動の項がない)。
balance と番号は使い道不明
銀行のデータを10行程度とりこんで手で修正するような用途向けだろうか? 全データ取り込みにはaccount毎に出金を集計する必要がある。資金移動は全部手修正?
Format: 日付,出金,説明 (CB2Gris2.py のamountを入金と読めばそのままでよし)
結局 qif を吐く script を書く…
とりあえず UTF-8 じゃないと駄目っぽい (csvはshift_jis可)。
後述の Grisbi の吐いたものと突き合わせてみると…、opening balance必須か?
片や Grisbi の csv import
gnucash 同様、account 毎に出金を集計したcsvを用意。
csv には移送先を渡す余地はあり、読み込みにも成功するが実際には transfer になっていないので手修正が必要。
カテゴリの扱いも要注意(sub categoryを与えないと変になるのでcategory:categoryにしておく)。
読み込む都度適宜新アカウントを作らせればよい。
bank と cash の区別が不明
Format: Date, Payee, Balance(?), Note, Category, Sub-Category
上記 gnucash 用 qif はちゃんと読める。 YY/MM/DD だと DD/MM/YY と読み間違えるので YYYY/ にする。 transfer はやはり扱えない?
palm cashbook の吐いた csv 出力を account 毎に分けて QIF に変換する python script。
かなり個人的な処理(外食費を食費のサブカテゴリに戻すとか)も含んでいる
#! /usr/bin/python # -*- coding: shift_jis -*- "rb""税金等", "光熱費・水道", "通信""カテゴリ""資産""その他""外食費""食費""NHK""光熱費・水道""/") DATE="20"+D[0]+"-"+D[1]+"-"# format is: date, payee, category, balanse, notes "自分の財布", "立て替え""●●銀行", "△△銀行""CCard""CBdata"".qif" #OUTNAME="CBdata"+str(N)+A+".csv" "w") # QIF format "Cash""Bank" CB.write("!Type:""\n") CB.write("D""\n") CB.write("T0\n") CB.write("CX\n") CB.write("POpening Balance\n") CB.write("L["+A+"]\n") CB.write("^\n""D"+L2[0]+"\n") CB.write("T"+"-"+L2[4]+"\n") CB.write("P"+L2[5]+"\n") CB.write("L"+L2[2]+":"+L2[3]+"\n") CB.write("^\n"