EasyMoney财务数据迁移到随手记的流程
关于 EasyMoney 记账软件
之前在 Android 手机一直都用一个比较小巧的记账软件 Handy EasyMoney(轻松理财) 来记录管理平时的理财开销等数据,虽然这个 App 也比较流畅好用,但用到后来越来越发现 EasyMoney 的缺点:
- 只支持 Android 平台,不支持 iOS、Windows 等平台;
- 完全不支持网络,没有同步、Web 管理等操作,更别想实现全平台同步等目标了;
- 老版本导出的数据有可能导入不了新版本,有点不保险;
- 条件查询、报表管理功能还比较薄弱;
- 采用私有的数据格式,导出只能再选择 CSV 格式导出,不方便迁移到其它软件;
- 不支持导入其它财务软件的数据。
而最近看到的随手记软件(官网:http://www.feidee.com/)则基本都解决了上面的问题,特别是全平台同步(不止主流的 Android、iPhone、iPad 等平台,连软件现在很稀少的 Windows Store 上都有随手记了)和强大的 Web 管理功能还是有比较深的印象。
最近想着能把数据从 EasyMoney 迁移到随手记,但由于 EasyMoney 并不是特别知名,随手记支持的数据导入方式并没有 EasyMoney,而我在 EasyMoney 上已经记了一年多的财务数据,如果手工导入是会疯掉的。因此稍研究了下 EasyMoney 的 CSV 导出数据格式和随手记的 Web 导入格式,写了一个脚本来自动实现数据转换,方便进行导入。
EasyMoney 数据导入随手记
下面以我现在使用的 Handy EasyMoney 1.6.3 汉化版本为例子说明如何将 EasyMoney 财务数据导入到随手记中,英文版的 EasyMoney 的方法需要稍做下改动,请注意下面的说明。
首先进入手机的 EasyMoney App,记下随手记里的各个账户的名称和初始余额,例如我的账户列表为(名称不可出错):现金、信用卡、银行账户、支付宝。然后点击菜单中的“数据库工具”,选择“导出.CSV”,然后就可以选择不同的账户类型进行导出,建议将“字段分隔符”设置为“|”或者“Tab”,防止和财务数据中的信息冲突 :
点击“导出”按钮就会在 SD 卡的 EasyMoney/csv_output 文件夹中产生对应的 CSV 文件,将 CSV 文件拷贝到 PC 中,可以用支持 UTF-8 的文本编辑器打开检查下,格式就像下面这样:
PAYEE_ITEM_DESC|CATEGORY|AMOUNT|STATUS|TRAN_DATE|REMARKS "上海汽车站"|"交通"|-42.00|"未清算"|"21 Aug 2013"|"回常熟汽车票"| "常熟公交"|"交通"|-1.00|"未清算"|"21 Aug 2013"|"汽车南站回公司"| "银环面馆"|"食品"|-8.00|"未清算"|"21 Aug 2013"|"午餐"| "华兴便利"|"食品"|-1.50|"未清算"|"21 Aug 2013"|"中午雪糕"| "安徽大排档"|"食品"|-8.00|"未清算"|"21 Aug 2013"|"晚餐"| "华联超市"|"购物"|-13.60|"未清算"|"21 Aug 2013"|"瑞士卷、山楂、雪碧、牙膏"|
下面先访问随手记官方网站,进入 “我的账本”,点击 “账户” 标签,向随手记的账户列表预先添加好需要的账户以备导入,账户列表里的账户名称最好与 EasyMoney 中的账户名称一致,这样批量导入数据比较方便(可以等导入完成之后修改账户名称的)。
例如如下图所示,我把现金账户中的子账户名称改为与 EasyMoney 对应的名称:现金,并设置初始余额,将信用卡账户中的子账户名称改为:信用卡,将金融账户中的子账户名称改为:银行账户,并在虚拟账户中建立一个账户,名称为:支付宝。
需注意的是 EasyMoney 中信用卡账户与普通账户没什么区别,初始余额表示信用卡的初始可用额度,例如 10000 元的信用卡初始余额为 8000 元;而在随手记中初始余额表示信用卡的负债数额,这样上面的情况就可以用随手记专门的“信用卡”功能模块,先设置信用卡可用额度为 10000 元,初始负载数额为 2000 元。
随后进入随手记 Web 版的 “记账” 标签,这时就有几条记录表示余额变更,此时需要将这几条记录的时间修改为 EasyMoney 中最早的记录时间之前,这样导入数据之后账户的余额就是正确的值。
下载导入数据用的随手记 Web 版 Excel 模板(点击 [这里] 下载),打开查看一下随手记的数据格式如下所示:
简单研究了随手记的 Excel 模板格式之后,我写了一个 Linux shell 环境(Windows 上也可以使用 Cygwin 等 shell 环境)下运行的 easymoney2feidee.sh 脚本来自动将 EasyMoney 导出的数据转换为随手记的数据格式。
你可以直接点击 [这里] 或 [这里] 下载此脚本,脚本内容如下:
#!/bin/sh if [ $# -lt 3 ]; then echo "Usage: $0 csv-file account-type out-file" exit fi EM_FILE="$1" EM_TYPE="$2" EM_OUT="$3" sed -i 's/\"//g' $EM_FILE gawk -F '|' -v ETYPE="$EM_TYPE" 'BEGIN{ m = split("Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec", d, "|") for (o = 1; o <= m; o++){ months[d[o]] = sprintf("%02d", o) } } { if (NR > 1 && $2 != "转账 (转入)") { OUT_TYPE = ""; OUT_VAL = $3; if ($2 == "转账 (转出)") { if (substr($1, 1, 13) == "转入账户 ") { OUT_TYPE = substr($1, 14); } printf "转账"; } else if ($3 > 0) { printf "收入"; } else { printf "支出"; } if ($3 < 0) { OUT_VAL = -OUT_VAL; } split($5, time, " "); date = time[3]" "months[time[2]]" "time[1]" 0 0 0" printf "\t"strftime("%Y-%m-%d", mktime(date)); if (length(OUT_TYPE) <= 0) { printf "\t"$2; } else { printf "\t"; } printf "\t"; printf "\t"ETYPE; printf "\t"OUT_TYPE; printf "\t"OUT_VAL; printf "\t本人"; if (length(OUT_TYPE) <= 0) { printf "\t"$1; } else { printf "\t"; } printf "\t"; printf "\t"$6"\n"; } }' $EM_FILE > $EM_OUT
下面简单说明下脚本:
在 shell 下运行 easymoney2feidee.sh 脚本并传入 3 个参数,分别表示 EasyMoney CSV 文件名、CSV 文件对应的账户名称、输出文件名称。
如果你的 CSV 文件不是用 “|” 隔开的,请修改脚本第 13 行中的 “|” 分隔符。脚本首先会去掉 CSV 文件中的所有双引号方便处理数据,然后按分割符得到数据,并判断是否是 EasyMoney 的转账处理(转出需要分别记录本账户名称、转入的账户名称;如果是转入则不需要记录),先记录财务记录类型,然后将 EasyMoney 的日期(EasyMoney 只支持日期,没有细化到具体时间)转换为随手记的时间格式,记录商家、金额(EasyMoney 金额为正值表示收入,负值表示支出)等信息,最终以 Tab 隔开生成输出文件(Tab 隔开的文本复制到随手记 Excel 表格中时可以自动跨越列)。
需要注意的是此脚本处理的是汉化版的 EasyMoney 的数据,其中转账用的固定值为:转账 (转入)、转账 (转出)、转入账户,如果你使用的是英文原版的 EasyMoney App,那需要将脚本小做下修改。
例如我在 Cygwin 环境下运行脚本将 “现金” 账户的 CSV 文件转为随手记的数据:
./easymoney2feidee.sh 现金_cny.csv 现金 现金.txt
输出的文件即为:现金.txt 文件,使用文本编辑器打开 现金.txt 文件,并将所有内容复制到随手记的模板 Excel 文件中并保存,最终数据形式即符合随手记的要求了(检查下与 EasyMoney 的 CSV 数据是否相符):
然后就可以到随手记的 “我的账本” 首页中选择 “导入导出” 并选择数据导入选项的 “随手记web版”,选择上面生成的 Excel 文件,点击 “上传数据” 等待片刻,随手记就能识别到数据,此时还需要最后一步选择分类数据和随手记账户:
如上图所示,仔细选择 EasyMoney 中的分类和随手记分类的对应关系,并选择导入的随手记账户,点击导入数据按钮,稍等几分钟数据就正确导入了(我的现金账户 2000 条数据导入花了 4 分钟左右),在随手记 Web 版的记账界面中可以查看到:
如果你发现刚才选择的分类有的条目不对应,完全可以借助随手记强大的条件查询功能先搜索到对应条目,然后使用批量修改功能统一进行修改,总之比 EasyMoney 的可用性好不少。
本文为个人总结经验所得,所写的脚本并不适合所有的情况,因此使用中有任何问题欢迎提出指正哦,玩的开心~~~ ^_^
阿石:
2013年08月25日 星期日 10:09上午
Uranus_Zhou,
感谢支持随手记,我是随手记PM,发你帐号给我,我周一发你Android的VIP优惠券。
欢迎继续关注随手记,:)
阿石
admin:
2013年08月27日 星期二 01:45上午
谢谢咯,我的账号:qexing (at) 163.com