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”,防止和财务数据中的信息冲突 :

EasyMoney导出CSV数据

点击“导出”按钮就会在 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 的可用性好不少。

本文为个人总结经验所得,所写的脚本并不适合所有的情况,因此使用中有任何问题欢迎提出指正哦,玩的开心~~~ ^_^

2 条评论 在此博文.
  1. 阿石:

    Uranus_Zhou,

    感谢支持随手记,我是随手记PM,发你帐号给我,我周一发你Android的VIP优惠券。

    欢迎继续关注随手记,:)

    阿石

  2. admin:

    谢谢咯,我的账号:qexing (at) 163.com

发表评论





*