先特别说明下这个所有,这里的所有指的是 excel 或 csv 格式的流水账单文件,如果是 pdf 文件先使用 Tabula: Extract Tables from PDFs 工具提取下流水表格。
如果你的流水账单不能转为我说的格式,那很抱歉,我下来说的工具暂时不支持,不过可以在 github 提交问题,一块讨论。
工具安装
下载对应的文件,修改文件为 excel-proc。
定义配置
对于不同的账单,之间的区别如下:
- 金额、日期、交易类型、商品信息等等,每个信息的所在列都不统一。
- 金额正负值不统一,影响 Beancount 交易时的金额正负值。
- 时间格式不统一。
正因为上面的不统一,很多的导入工具都必须去适配不同的账单,而我这个工具不需要去适配。
现在拿出一个 beancount 格式账单:
2022-11-09 * "山东杂粮煎饼" "收钱码收款" Liabilities:HuaBei -6 CNY Expenses:Others
如果我根据自己的流水情况,我直接告诉它:
2022-11-09
用 excel 第 1 列替换
山东杂粮煎饼
用第 3 列替换
- 等等,需要替换的我直接告诉即可
现在搬出来我讲的这个工具的配置文件,创建一个
config.tpl
文件,对照上面的例子写:{{.col1}} * "{{.col3}}" "{{.col4}}" Liabilities:HuaBei -{{.col5}} CNY Expenses:Others
这就是一个简单的配置文件,根据你自己的流水填充不同的列即可。
开始导入
配置文件有了,现在开始执行工具:
excel-proc --config config.tpl data.csv
—config
配置文件路径
data.csv
支付宝、微信、银行等流水文件
- 默认生成一个
defaut.bean
文件,自定义使用—output
参数
但是还有个问题,一个流水文件生成的结果可不止这一种 bean 格式,如下的支付宝流水截图:
截图那一块代表这个钱是从 “余额宝” 或 “花呗” 账户花的,对应 beancount 文件类似如下:
; 花呗是这个 2022-11-09 * "山东杂粮煎饼" "收钱码收款" Liabilities:花呗 -6 CNY Expenses:Others ; 余额宝是这个 2022-11-09 * "山东杂粮煎饼" "收钱码收款" Liabilities:余额宝 -6 CNY Expenses:Others
下来写配置文件时,需要对截图中的第 5 列数据进行条件匹配:
; {col5} == "花呗" {{.col1}} * "{{.col}}" "{{col4}}" Liabilities:花呗 -{{.col6}} CNY Expenses:Others ; {col5} == "余额宝" {{.col1}} * "{{.col}}" "{{col4}}" Liabilities:余额宝 -{{.col6}} CNY Expenses:Others
这个新的配置文件多了一个 “分号” 开头的语句,这个可不是注释,而是用来匹配 excel 文件的的数据。
{col5} == "花呗"
表示第五列的数据为 “花呗” 时,展示自己紧挨的内容模板,这下继续拿着这个配置文件运行即可。扩展知识
在条件匹配这一块可不像我刚介绍的这么简单,可能存在如下情况:
- 金额一列大小写判断
- 某列数据存在或不存在某个关键字时
- 等等
模板的内容存在情况:
- 时间格式化
- 金额运算
- 等等
这些都支持,详细的还是直接前往 ,该工具比较灵活,当然也会付出一点代价,就是学习成本,但是我相信,这个工具可以举一反三,适配更多流水情况。
excel-proc
miaogaolin • Updated Jan 6, 2024