支持所有账单导入到 Beancount
支持所有账单导入到 Beancount

支持所有账单导入到 Beancount

Tags
Beancount
支付宝
微信
账单流水
Published
December 6, 2022
先特别说明下这个所有,这里的所有指的是 excel 或 csv 格式的流水账单文件,如果是 pdf 文件先使用 Tabula: Extract Tables from PDFs 工具提取下流水表格。
如果你的流水账单不能转为我说的格式,那很抱歉,我下来说的工具暂时不支持,不过可以在 github 提交问题,一块讨论。

工具安装

notion image
下载对应的文件,修改文件为 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 格式,如下的支付宝流水截图:
notion image
截图那一块代表这个钱是从 “余额宝” 或 “花呗” 账户花的,对应 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
miaogaolinUpdated Jan 6, 2023
,该工具比较灵活,当然也会付出一点代价,就是学习成本,但是我相信,这个工具可以举一反三,适配更多流水情况。