选定一个切换日期,导出切换日前一天的 QuickBooks 试算平衡表,然后为每个资产负债表科目各写一条 pad 和一条 balance 来开立你的 Beancount 总账。当 bea check 通过、且权益余额与 QuickBooks 一致时,你的账本就完成了迁移。切换日之后的一切都记录在 Beancount 里。
本指南同时适用于 QuickBooks Online 和 QuickBooks Desktop。它不依赖任何 QuickBooks 导入器,因为 Beancount 并不自带。你先迁移余额,再决定要带多少历史数据。
如果你还在犹豫是否该换,请先读Beancount 与 QuickBooks 对比。
1. 决定切换日期以及要保留什么
选一个财年的第一天,比如 2026-01-01。以年度为界可以让一个纳税年度只留在一个系统里。这也意味着你在 Beancount 里的第一份利润表从零开始。
现在就决定 Beancount 里要放多少历史数据:
- 只放余额。 在切换日开账,把 QuickBooks 报表作为更早年份的存档。这是最快的路径,本指南余下部分都基于这一假设。
- 年度汇总。 根据每一年的试算平衡表,为过去的每一年各加一条汇总分录。这样你的跨年报表在 Beancount 里也能用。
- 完整交易历史。 用脚本转换总账(General Ledger)导出文件。这是工作量最大的一种,第 5 节会说明它涉及什么。
在 QuickBooks 里把每个银行和信用卡账户都核对到切换日的前一天。一个未核对的余额会把它的差错带进你的新总账。
2. 从 QuickBooks 导出
你需要三份报表,全部截止到切换日的前一天(本指南中为 2025-12-31):
| 报表 | 它能给你什么 |
|---|---|
| Account List(科目列表) | 每个账户的名称和类型,用于第 3 步的映射 |
| Trial Balance(试算平衡表) | 每个账户的期末余额,将成为你的期初余额 |
| General Ledger(总账) | 每一笔交易,用于历史数据和存档 |
QuickBooks Online。 进入 Reports,然后 Standard reports,按名称打开每份报表。选择 Export/Print,然后 Export to Excel。Account List 就是会计科目表报表。Settings 里 Tools 栏下的 Export data 工具会把一组报表和列表作为 Excel 文件导出到一个 zip 包中。Intuit 在 Export your QuickBooks Online data 中记录了两条路径。
这些 QuickBooks Online 导出文件都是 Excel 文件。如果要用脚本读取,用电子表格打开每一个,另存一份 CSV 副本。
附件(Attachments) 需要单独导出。在 QuickBooks Online 中,进入 Settings,然后 Attachments,选中这些文件,选择 Batch actions 再选 Export。把这个 zip 和你的存档放在一起。
QuickBooks Desktop。 在 Windows 上,从 Reports 然后 Reports Center 打开每份报表。选择 Excel,然后 Create New Worksheet。下一个窗口可以直接保存为 Excel 工作簿或 CSV 文件,详见 Export reports as Excel workbooks。Desktop 还可以把列表(包括会计科目表)导出为 IIF 文件:File,然后 Utilities,然后 Export,再选 Lists to IIF Files。IIF 导出只覆盖列表。Intuit 表示你可以导入交易但无法导出交易,详见 Export, import, and edit IIF files。
保持原始导出文件不变。如果日后有数字受到质疑,它们就是你的证据。
3. 把账户映射到 Beancount 层级
Beancount 有五个根账户。每一种 QuickBooks 账户类型都归入其中之一下:
| QuickBooks 账户类型 | Beancount 账户 |
|---|---|
| Bank | Assets:Bank:Checking、Assets:Bank:Savings |
| Accounts receivable (A/R) | Assets:AccountsReceivable |
| Other Current Assets、Fixed Assets | Assets:Prepaid:…、Assets:Equipment:… |
| Credit Card | Liabilities:CreditCard:Visa |
| Accounts payable (A/P)、Other Current Liabilities | Liabilities:AccountsPayable、Liabilities:SalesTax |
| Long Term Liabilities | Liabilities:Loans:… |
| Equity、Retained Earnings、Opening Balance Equity | Equity:Opening-Balances |
| Income、Other Income | Income:Sales、Income:Interest |
| Cost of Goods Sold | Expenses:COGS:… |
| Expenses、Other Expense | Expenses:Rent、Expenses:Software |
账户名以大写字母开头且不含空格,所以 "Office Supplies" 变成 Expenses:Office-Supplies。QuickBooks 的子账户变成更深的层级,比如 Expenses:Vehicle:Fuel。
Retained Earnings 和 Opening Balance Equity 合并为一个 Equity:Opening-Balances 账户。Beancount 会根据你的收入和费用账户计算当年损益,所以不需要结转单独的留存收益账户。
4. 在切换日开立总账
这家示例公司在 2025-12-31 有一份四行的试算平衡表。收入和费用行已经并入 Retained Earnings。QuickBooks Online 在新财年开始时也会自己这么做,详见 View retained earnings account details。
| 账户 | 借方 | 贷方 |
|---|---|---|
| Checking | 12,450.00 | |
| Accounts Receivable (A/R) | 3,200.00 | |
| Visa credit card | 1,875.40 | |
| Retained Earnings | 13,774.60 | |
| 合计 | 15,650.00 | 15,650.00 |
把它保存为 main.bean:
option "operating_currency" "USD"
2025-12-31 open Assets:Bank:Checking USD
2025-12-31 open Assets:AccountsReceivable USD
2025-12-31 open Liabilities:CreditCard:Visa USD
2025-12-31 open Equity:Opening-Balances USD
; Opening balances from the QuickBooks Trial Balance as of 2025-12-31
2025-12-31 pad Assets:Bank:Checking Equity:Opening-Balances
2025-12-31 pad Assets:AccountsReceivable Equity:Opening-Balances
2025-12-31 pad Liabilities:CreditCard:Visa Equity:Opening-Balances
2026-01-01 balance Assets:Bank:Checking 12450.00 USD
2026-01-01 balance Assets:AccountsReceivable 3200.00 USD
2026-01-01 balance Liabilities:CreditCard:Visa -1875.40 USD
2026-01-01 balance Equity:Opening-Balances -13774.60 USD每一条 pad 要求 Beancount 插入使下一条 balance 断言成立的分录。每条 pad 的平衡方都进 Equity:Opening-Balances。balance 断言在其日期的开始时校验,所以 pad 的日期是切换日的前一天。
借方变成正数,贷方变成负数。这就是 Visa 的余额是 -1875.40 USD 的原因。
最后一行是对账。权益必须等于 -13774.60 USD,即 Retained Earnings 的贷方金额。如果某个资产或负债数字打错,被 pad 出来的权益就会改变,那条断言就会失败。
对于一家真实公司,为试算平衡表上的每一个资产负债表科目各加一条 open、一条 pad 和一条 balance。如果你按名称跟踪未结发票,把 A/R 和 A/P 按每个客户或供应商拆成一个子账户。
5. 引入历史数据
切换之后,新活动记录在 Beancount 里。银行和信用卡对账单是主要来源。在浏览器里用 CSV 转 Beancount 转换器转换银行 CSV 导出,或用银行导入指南走命令行。
过去的年份是可选的。QuickBooks 总账导出没有一键导入。迁移那段历史需要脚本或手动映射:
- 把 General Ledger 导出保存为 CSV。
- 按日期和交易编号把它的行分组为交易。
- 用第 3 步的映射重命名每个账户。
- 把每一组写成一笔 Beancount 交易,其各分录之和为零。
如果你引入历史数据,就在那段历史的起点开立账户,而不是在切换日。然后保留 2026-01-01 的余额断言。它们证明转换后的历史数据到达的余额与 QuickBooks 报告的相同。
6. 对照 QuickBooks 校验
检查总账,然后列出所有余额:
bea --file main.bean check
bea --file main.bean query "SELECT account, sum(position) GROUP BY account ORDER BY account"bea check 应报告没有错误。查询返回四行:Assets:AccountsReceivable 为 3200.00 USD,Assets:Bank:Checking 为 12450.00 USD,Equity:Opening-Balances 为 -13774.60 USD,Liabilities:CreditCard:Visa 为 -1875.40 USD。逐行与 QuickBooks 试算平衡表对比,贷方记为负数。
对命令行不熟?用 CLI 快速上手安装 bea。
7. 哪些东西不会迁移过来
账本迁移搬的是会计余额和历史数据。它不会搬 QuickBooks 围绕这些运作的业务功能:
- 发票和收款链接。 未结发票保留为 A/R 余额。今后使用单独的开票服务。
- 工资(Payroll)。 工资发放、税务表单和员工记录留在你的工资服务商那里。
- 销售税申报。 Beancount 记录负债。申报仍是一项单独的任务。
- 附件。 收据和单据来自它们自己的 zip 导出,而不在报表里。
- 银行数据源规则和核对历史。 把分类重建为导入规则。
对比页面说得很直白:不要抱着几个插件就能重建整个 QuickBooks 运营套件的假设去选 Beancount。当总账本身就是你长期的记录系统时,才选它。
在小企业里用 Beancount?请看面向小企业的 Beancount.io,了解托管账本、银行同步和会计师协作。