将银行对账单转换为 OFX 格式
OFX 是 Xero、MYOB 和 FreeAgent 的标准导入格式。本文将介绍如何将银行对账单 PDF 转换为 OFX,以及它与 CSV 和 QBO 的区别。

您需要将银行交易导入 Xero、MYOB 或 FreeAgent。银行提供给您的是 PDF 对账单。幸运的话可能还会提供 CSV。但会计软件需要的是 OFX 文件——这是一种大多数人从未听说过的格式,更不用说知道如何创建了。
OFX - Open Financial Exchange - 是这些平台构建所依据的标准金融数据交换格式。它包含用于重复检测的交易 ID,嵌入账户元数据,并在导入时自动映射列。无需猜测日期格式。无需手动分配列。不会意外地重复导入同一个月的数据。它就是能用。
问题在于,银行几乎从不直接提供 OFX 文件。它们提供 PDF。有时它们会提供 CSV 下载 - 但 CSV 缺乏 OFX 提供的结构和重复保护。本指南将解释 OFX 格式是什么,为什么会计平台偏爱它,它与 CSV 和 QBO 的比较,以及如何将您的银行对账单 PDF 转换为可以干净地导入 Xero、MYOB、FreeAgent 和其他软件的 OFX 文件。
什么是 OFX 格式?
OFX 代表 Open Financial Exchange(开放金融交换)。它是一种基于 XML 的数据格式,专门用于在机构、软件和最终用户之间交换金融信息。该规范最初由 Microsoft、Intuit 和 CheckFree 于 1997 年开发,现由 Financial Data Exchange (FDX) 维护。当前版本 OFX 2.2 使用格式正确的 XML。早期版本 (1.x) 使用 SGML - 一种较宽松的标记语法,允许未关闭的标签。大多数会计软件都支持这两种格式。
OFX 文件使用 .ofx 扩展名,并包含结构化的金融数据:
- 交易记录 - 日期、金额、收款人姓名、备注、支票号码和交易类型(借记、贷记、转账、费用等)
- FITIDs - 金融机构交易 ID,为每笔交易分配的唯一标识符,用于重复检测
- 账户识别 - 银行路由号码 (BANKID)、账号 (ACCTID) 和账户类型(支票、储蓄、信用卡)
- 对账单元数据 - 对账单期间的期初和期末余额,以及期初和期末余额
- 货币 - ISO 4217 货币代码(美元、英镑、欧元、澳元、加元等)
当您将 OFX 文件导入会计软件时,每个字段都会自动映射。没有歧义,没有列映射,没有误解的空间。
OFX 对会计的重要性
OFX 是专门为金融数据交换而设计的,其设计细节体现在其功能中。
交易 ID (FITID) 实现重复检测
OFX 文件中的每笔交易都带有一个唯一的 FITID - 金融机构交易 ID。导入文件时,会计软件会记录所有已看到的 FITID。再次导入相同文件,或导入两个重叠的文件,软件会默默地跳过任何具有先前已见 FITID 的交易。
CSV 没有等效功能。重复导入同一个 CSV 文件会导致条目翻倍。清理重复交易是会计中最常见且最耗时的麻烦之一。OFX 在格式层面消除了这个问题。
嵌入账户识别信息
OFX 文件包含银行路由号码和账号,因此会计软件可以自动将导入的交易匹配到正确的银行账户 - 或者在文件不匹配时发出警告。CSV 文件不包含账户元数据。
标准化结构消除了列映射
对于 CSV,软件必须询问:哪一列是日期?哪一列是金额?是单独的借记/贷记列还是单一的有符号金额?OFX 跳过了所有这些。每个字段都有一个定义的标签 - DTPOSTED 用于日期,TRNAMT 用于金额,NAME 用于收款人。软件读取标签并确切知道所有内容的位置。
包含对账单日期和余额
OFX 文件包含对账单期间(期初和期末日期)以及期间结束时的账面余额 - 这是 CSV 文件不包含的上下文信息,便于进行余额验证和对账。
广泛的软件兼容性
OFX 被广泛的会计和金融软件接受:
- Xero - 首选导入格式
- MYOB - 原生支持
- FreeAgent - 原生支持
- Wave - 原生支持
- GnuCash - 原生支持
- Sage - 大多数版本都支持
- Microsoft Money (旧版) - 该格式最初是为此设计的
- Moneydance - 原生支持
- KMyMoney - 原生支持
对于 QuickBooks 用户,密切相关的 QBO 格式(Intuit 的 OFX 方言)是更好的选择。但对于大多数其他会计平台 - 特别是 Xero - OFX 是标准。
OFX vs. CSV vs. QBO
在将银行数据导入会计软件时,您最常遇到的三种格式。
| 特征 | OFX | CSV | QBO |
|---|---|---|---|
| 格式基础 | XML(结构化标记) | 纯文本(逗号分隔) | SGML/XML(Intuit 的 OFX 方言) |
| 交易 ID | 是 (FITID) | 否 | 是 (FITID) |
| 重复检测 | 是 - 自动 | 否 - 需要手动清理 | 是 - 自动 |
| 列映射 | 自动 | 手动 - 用户分配每一列 | 自动 |
| 账户元数据 | 是(路由+账号) | 否 | 是(路由+账号) |
| 日期格式 | 标准化 (YYYYMMDD) | 可变 - 必须与软件区域匹配 | 标准化 (YYYYMMDD) |
| 对账单余额 | 是(期初+期末) | 否 | 是(期初+期末) |
| 金额处理 | 单一有符号字段,无歧义 | 可能有单独的借记/贷记列 | 单一有符号字段,无歧义 |
| 特殊字符处理 | XML 实体(已编码) | 可变 - 编码问题常见 | SGML 实体(已编码) |
| 主要软件 | Xero、MYOB、FreeAgent、Wave、GnuCash | 通用(任何电子表格或会计工具) | QuickBooks(在线+桌面) |
| 可编辑性 | 需要 XML 知识 | 容易 - 在 Excel 中打开 | 需要 SGML 知识 |
何时使用每种格式
使用 OFX 时: 导入 Xero、MYOB、FreeAgent、Wave、GnuCash 或任何非 QuickBooks 的会计软件。最干净的导入路径 - 自动映射,重复保护,无格式问题。
使用 QBO 时: 导入 QuickBooks Online 或 Desktop。QBO 是 Intuit 特有的 OFX 方言,带有 Intuit 特定的标签。有关详细信息,请参阅我们的 QBO 转换指南。
使用 CSV 时: 目标软件仅接受 CSV,或者您需要在导入前编辑交易。CSV 是通用的后备选项,但需要更多手动工作,并且不提供重复保护。
方法 1:使用 PDFSub 将 PDF 转换为 OFX
从银行对账单 PDF 到可用于导入的 OFX 文件的最直接路径。
- 从银行网站或电子邮件下载您的银行对账单 PDF
- 前往 PDFSub 的银行对账单转换器
- 上传您的 PDF - 拖放或点击浏览
- PDFSub 自动提取交易,检测日期、金额、描述和交易类型
- 从格式下拉菜单中选择 OFX 作为输出格式
- 下载 OFX 文件

PDFSub 生成有效的 OFX 1.x 文件,每笔交易都有唯一的 FITID,格式正确的日期 (YYYYMMDD),正确的借记/贷记符号,以及会计软件所期望的账户元数据标签。它处理多页对账单、运行余额、多行交易描述,以及银行账户和信用卡。
该转换器支持 130 多种语言的 20,000 多个银行格式。数字 PDF(基于文本的对账单)完全在您的浏览器中处理 - 文件永远不会离开您的计算机。扫描或基于图像的 PDF 将回退到服务器端 AI 提取。
OFX 是可用的 8 种输出格式之一,另外还有 CSV、Excel、TSV、JSON、QBO、QFX 和 QIF。全能套餐为 $20/用户/月(按年计费)或 $25/用户/月(按月计费),包括每位用户 500 页银行对账单以及 7 天免费试用。
方法 2:将 CSV 转换为 OFX
如果您已经有了银行提供的 CSV 文件 - 或来自其他转换工具 - 您可以将其转换为 OFX。但这比听起来要难,因为 OFX 除了原始交易数据外还需要其他东西。
挑战:
- FITID 生成。 每笔交易都需要一个唯一的金融机构交易 ID。您必须确定性地生成这些 ID - 通常通过将日期、金额和描述组合在一起进行哈希处理 - 这样,重复导入相同的数据就会产生相同的 FITID 并触发重复检测。
- 日期格式。 OFX 要求日期格式为 YYYYMMDD(例如
20260302)。您的 CSV 可能是 MM/DD/YYYY、DD/MM/YYYY 或其他特定于区域设置的格式。格式错误会导致交易日期不正确。 - 账户元数据。 您需要正确设置 BANKID(路由号码)和 ACCTID(账号),以及 ACCTTYPE(CHECKING、SAVINGS 或 CREDITCARD)。这些值在 CSV 中不存在 - 您必须知道它们并手动添加。
- 金额符号约定。 OFX 使用负金额表示借记,正金额表示贷记。如果您的 CSV 有单独的借记/贷记列,您需要合并它们。如果您的 CSV 使用相反的符号约定(信用卡对账单常见),您需要翻转它。
- XML 结构。 OFX 文件需要正确的标头声明、正确嵌套的标签以及特殊字符(与号、尖括号、非 ASCII 字符)的 XML 实体编码。
几个桌面工具和在线转换器可以处理 CSV 到 OFX 的转换。PDFSub 在一步中处理整个流程 - PDF 到 OFX - 完全跳过了中间的 CSV。
将 OFX 导入 Xero
Xero 将 OFX 视为一等导入格式。导入过程很简单。
分步说明
- 登录 Xero 并转到 会计 > 银行账户
- 点击您要导入交易的银行账户
- 点击 管理账户(或三个点菜单)并选择 导入对账单
- 点击 浏览 并选择您的 OFX 文件
- 点击 导入
- Xero 解析文件并显示摘要 - 交易数量、日期范围和总金额
- 确认导入
导入的交易显示为未对账的对账单行。对于每一行,Xero 提供三个操作:匹配(链接到现有发票或账单)、创建(创建具有账户代码和税率的新交易)或转账(记录银行账户之间的转账)。
Xero 如何处理重复项
当 Xero 导入 OFX 文件时,它会读取每笔交易的 FITID,并将其与该银行账户先前导入的所有 FITID 进行比较。任何具有先前已见 FITID 的交易都会被静默跳过。这意味着您可以安全地导入重叠的日期范围 - Xero 只会添加它尚未见过的交易。
这是 Xero 推荐 OFX 而不是 CSV 的主要原因之一。使用 CSV,Xero 没有可靠的方法来检测重复项,重叠导入会创建重复的对账单行,这些行必须手动查找和删除。
有关所有 Xero 导入方法的完整指南 - 包括银行信息源、CSV 格式规则和故障排除 - 请参阅我们的 Xero 银行对账单导入指南。
将 OFX 导入 MYOB
MYOB (Mind Your Own Business) 在 MYOB Business 和 MYOB AccountRight 中都支持 OFX 导入。
MYOB Business (在线)
- 从主菜单转到 银行
- 点击 导入对账单
- 选择银行账户
- 点击 选择文件 并选择您的 OFX 文件
- MYOB 预览交易 - 查看日期、金额和描述
- 点击 导入
MYOB AccountRight (桌面)
- 转到 银行 > 银行信息源 > 导入银行对账单
- 从下拉列表中选择目标银行账户
- 浏览到您的 OFX 文件并选择它
- 在银行信息源窗口中查看导入的交易
- 将每笔交易分配给相应的账户
MYOB 使用 OFX 文件中的 FITID 进行重复检测,就像 Xero 一样。如果交易的 FITID 已存在于系统中,MYOB 会在导入时跳过它。
将 OFX 导入其他软件
FreeAgent
FreeAgent 在英国自由职业者和小企业中很受欢迎。导入 OFX:
- 转到 银行 并选择银行账户
- 点击 导入 > 上传银行对账单
- 选择您的 OFX 文件
- 查看预览并确认导入
FreeAgent 支持 OFX、QIF 和 CSV。与 Xero 和 MYOB 一样,它使用 OFX 文件中的 FITID 来防止重复导入。
GnuCash
GnuCash - 开源会计应用程序 - 通过其 AqBanking 集成支持原生的 OFX 导入:
- 转到 文件 > 导入 > 导入 OFX/QFX
- 选择您的 OFX 文件
- GnuCash 显示交易并要求您将其映射到账户
- 查看匹配器窗口 - GnuCash 根据 FITID 突出显示潜在的重复项
- 接受导入
GnuCash 是最早支持 OFX 的应用程序之一,其导入引擎同时支持 OFX 1.x (SGML) 和 OFX 2.x (XML) 文件。
Wave
Wave Accounting(现归 H&R Block 所有)支持 OFX 导入:
- 转到 会计 > 交易
- 点击银行账户
- 点击 导入 CSV 或 OFX
- 上传文件并将其映射到账户
- 查看并确认
Wave 也支持 CSV,但 OFX 提供自动字段映射和重复检测 - 与 Xero 和 MYOB 具有相同的优势。
理解 OFX 文件结构
OFX 文件是纯文本。您可以在任何文本编辑器中打开它来检查其内容。这是一个简化的示例,显示了关键元素:
OFXHEADER:100
DATA:OFXSGML
VERSION:102
SECURITY:NONE
ENCODING:USASCII
CHARSET:1252
COMPRESSION:NONE
OLDFILEUID:NONE
NEWFILEUID:NONE
<OFX> <SIGNONMSGSRSV1> <SONRS> <STATUS><CODE>0<SEVERITY>INFO</STATUS> <DTSERVER>20260302 <LANGUAGE>ENG </SONRS> </SIGNONMSGSRSV1> <BANKMSGSRSV1> <STMTTRNRS> <STMTRS> <CURDEF>USD <BANKACCTFROM> <BANKID>021000021 <ACCTID>123456789 <ACCTTYPE>CHECKING </BANKACCTFROM> <BANKTRANLIST> <DTSTART>20260201 <DTEND>20260228 <STMTTRN> <TRNTYPE>DEBIT <DTPOSTED>20260205 <TRNAMT>-85.50 <FITID>20260205-8550-001 <NAME>ACME SUPPLIES LLC <MEMO>Office supplies purchase </STMTTRN> <STMTTRN> <TRNTYPE>CREDIT <DTPOSTED>20260210 <TRNAMT>3200.00 <FITID>20260210-320000-001 <NAME>PAYROLL DEPOSIT <MEMO>Direct deposit - February </STMTTRN> </BANKTRANLIST> <LEDGERBAL> <BALAMT>12456.78 <DTASOF>20260228 </LEDGERBAL> </STMTRS> </STMTTRNRS> </BANKMSGSRSV1>
</OFX>关键标签说明
| 标签 | 说明 |
|---|---|
BANKID |
银行路由号码(美国的 ABA 号码) |
ACCTID |
账号 |
ACCTTYPE |
账户类型:CHECKING、SAVINGS、MONEYMRKT 或 CREDITLINE |
DTSTART / DTEND |
对账单期间的开始和结束日期 (YYYYMMDD) |
STMTTRN |
单个交易记录 |
TRNTYPE |
交易类型:DEBIT(借记)、CREDIT(贷记)、INT(利息)、FEE(费用)、SRVCHG(服务费)、DEP(存款)、ATM、POS、XFER(转账)、CHECK(支票)、PAYMENT(付款)、OTHER(其他) |
DTPOSTED |
交易日期,格式为 YYYYMMDD |
TRNAMT |
交易金额 - 借记为负数,贷记为正数 |
FITID |
金融机构交易 ID - 用于重复检测的唯一标识符 |
NAME |
收款人或交易名称(OFX 1.x 中最多 32 个字符) |
MEMO |
附加描述或备注(最多 255 个字符) |
LEDGERBAL |
期末余额,包含金额和日期 |
OFX 1.x(上图所示)使用 SGML 语法 - 标签不需要闭合。OFX 2.x 使用格式正确的 XML,带有正确的闭合标签。大多数会计软件都支持这两种格式。对于信用卡对账单,包装器从 BANKMSGSRSV1 变为 CREDITCARDMSGSRSV1,但内部的交易结构保持不变。
常见的 OFX 导入问题
日期格式错误
症状: 交易显示在错误的日期,或者导入失败并出现日期错误。
原因: OFX 文件包含不符合 YYYYMMDD 标准的日期。一些生成质量差的 OFX 文件在 XML 标签内使用了特定于区域设置的日期格式(MM/DD/YYYY 或 DD/MM/YYYY)。
修复: 在文本编辑器中打开 OFX 文件,检查 DTPOSTED 值。它们应恰好是 8 位数字 - 20260302,而不是 03/02/2026 或 02-Mar-2026。如果格式错误,则需要重新生成文件。PDFSub 始终以正确的 YYYYMMDD 格式输出日期。
重复交易被跳过,但您需要它们
症状: 您删除了交易并重新导入了文件,但软件不再导入它们。
原因: 软件会记住它曾经见过的每一个 FITID。即使删除了原始交易,FITID 仍然保留在系统的内存中。
修复: 您需要一个带有新 FITID 的文件。请联系您的软件支持部门以获取有关清除 FITID 历史记录的指导,或使用文本编辑器手动编辑 OFX 文件中的 FITID。
缺少账号
症状: 导入失败,或者软件无法将文件匹配到现有银行账户。
原因: OFX 文件中的 BANKID 或 ACCTID 标签为空或包含占位符值。一些 OFX 生成器完全省略了账户元数据。
修复: 打开 OFX 文件并添加正确的 BANKID(路由号码)和 ACCTID(账号)。这些必须与您的会计软件中的银行账户设置匹配,或者您需要在导入期间手动选择目标账户。
国际字符编码问题
症状: 收款人姓名或描述显示乱码字符 - 问号、方框或错误的带音标字母。
原因: OFX 文件使用的编码(例如 USASCII 或 Latin-1)不支持交易数据中的字符 - 德语的变音符号、法语的音标、日语字符、西里尔字母。
修复: OFX 文件应在标头中声明 UTF-8 编码,并且实际文件编码必须匹配。PDFSub 生成的 OFX 文件具有正确的 UTF-8 编码。
文件过大无法导入
症状: 导入超时或软件因文件大小或交易数量错误而拒绝该文件。
原因: 大多数会计平台对导入文件大小有限制。Xero 对每个文件限制导入 1,000 笔交易。其他平台也有类似的上限。
修复: 将 OFX 文件拆分为更小的文件 - 通常按月或按季度拆分。每个文件应包含少于 1,000 笔交易。确保每个拆分文件中的 DTSTART/DTEND 标签和 LEDGERBAL 值反映正确的期间。
信用卡交易导入时符号错误
症状: 购买显示为收入,付款显示为支出。
原因: OFX 文件使用了银行账户包装器 (BANKMSGSRSV1) 而不是信用卡包装器 (CREDITCARDMSGSRSV1)。这会混淆会计软件的符号约定处理。
修复: OFX 文件需要为账户类型使用正确的包装器。PDFSub 会自动检测对账单是来自支票账户、储蓄账户还是信用卡,并自动应用正确的 OFX 结构。
常见问题解答
OFX 和 QBO 有什么区别?
QBO 是 Intuit 的专有 OFX 方言,专为 QuickBooks 设计。底层结构几乎相同 - 相同的标签、相同的 FITID、相同的账户元数据。QBO 添加了 Intuit 特有的标签,如 INTU.BID(银行标识符)并使用 .qbo 扩展名。您通常可以将 .ofx 文件重命名为 .qbo,QuickBooks 就会读取它。为 QuickBooks 使用 QBO,为其他所有软件使用 OFX。
我可以打开 OFX 文件查看其内容吗?
可以。OFX 文件是纯文本。您可以在任何文本编辑器 - Notepad、VS Code、TextEdit - 中打开它,您将看到包含交易日期、金额、收款人姓名、FITID 和账户信息的标记。如果需要,您可以手动编辑它,但请注意结构。
Xero 是否偏爱 OFX 而不是 CSV?
是的。Xero 推荐使用 OFX 而不是 CSV 进行银行对账单导入。OFX 导入无需手动映射列即可自动进行,包含用于重复预防的 FITID,并具有标准化的日期/金额格式。CSV 也可以使用,但需要手动映射列,并且不提供重复保护。
如果我需要编辑数据,可以将 OFX 转换为 CSV 吗?
可以。大多数电子表格应用程序无法直接打开 OFX,但许多工具可以解析 OFX 并输出 CSV。如果您需要在导入前编辑交易,先转换为 CSV,进行编辑,然后转换回 OFX 是一种常见的流程。
FITID 是如何生成的?
银行从其内部交易参考号分配 FITID。当像 PDFSub 这样的转换器从 PDF 生成 OFX 时,它会通过将交易日期、金额和描述组合在一起进行哈希处理来创建确定性的 FITID - 因此,将同一个 PDF 转换两次会产生相同的 FITID,重新导入不会产生重复项。
OFX 导入的最大文件大小是多少?
这取决于软件。Xero 每个文件最多接受 1,000 笔交易。MYOB 和 FreeAgent 也有类似的限制。GnuCash 没有实际限制。如果您的对账单包含超过 1,000 笔交易,请按月或按季度将其拆分为多个 OFX 文件。
OFX 文件支持一个文件中的多个账户吗?
OFX 规范允许在一个文件中包含多个对账单响应 - 每个账户一个。但是,大多数会计软件期望每个文件只有一个账户。为了可靠导入,请为每个银行账户生成一个单独的 OFX 文件。
我可以使用 OFX 进行信用卡对账单吗?
可以。OFX 原生支持信用卡对账单。文件结构使用 CREDITCARDMSGSRSV1 作为包装器而不是 BANKMSGSRSV1,并且交易遵循信用卡符号约定(购买为负数,付款为正数)。PDFSub 会自动检测对账单类型并生成正确的 OFX 结构。
OFX 格式仍在更新吗?
是的。OFX 规范由 Financial Data Exchange (FDX) 积极维护。当前版本是 OFX 2.2。但是,大多数会计软件仍然接受 OFX 1.x 文件(SGML 格式)以及更新的基于 XML 的 2.x 文件。没有紧迫性需要使用最新版本 - 1.x 兼容性是普遍的。
OFX 格式支持哪些货币?
OFX 使用 ISO 4217 货币代码 - 美元、英镑、欧元、澳元、加元、日元、瑞士法郎以及数百种其他货币。货币在 CURDEF 标签中声明一次,并适用于所有交易。多币种对账单通过单个交易上可选的 ORIGCURRENCY 标签来支持。