Skip to content

Latest commit

 

History

History
89 lines (64 loc) · 3.46 KB

File metadata and controls

89 lines (64 loc) · 3.46 KB

mny-to-csv

Read a Microsoft Money .mny file and export it to clean, queryable CSV files.

Microsoft Money (and Money Plus) has been discontinued, but the .mny files it produces are still a Jet 4.0 / Access 2000 database with a custom MSISAM page format. The standard Windows Jet driver can't open them (it reports "Not a valid password"), and there's no maintained CLI converter. This tool reads the file directly with Jackcess and dumps every table to CSV, with the opaque handle fields joined to human-readable names.

The original file is opened read-only and never modified.

Requirements

  • JDK 17 or newer on your PATH (or set JAVA_HOME).
  • Maven — or just use the bundled wrapper (./mvnw on macOS/Linux, mvnw.cmd on Windows), which downloads Maven on first run.

That's it. Dependencies (Jackcess + the MSISAM decoding library) are pulled automatically from Maven Central — no manual JAR management.

Usage

# Export a .mny file to a directory of CSVs
./mvnw -q compile exec:java -Dexec.args="/path/to/file.mny /path/to/outdir"

On Windows:

mvnw.cmd -q compile exec:java -Dexec.args="C:\path\to\file.mny C:\path\to\outdir"

The dumper writes six files into the output directory:

File Contents
TRN.csv The main file. Every transaction, with account / category / payee resolved to names.
ACCT.csv Accounts (balances, flags, interest rates).
CAT.csv Category tree (name, alias, level, parent, tax, hidden).
PAY.csv Payees (name, alias, parent, vendor/customer).
TRN_SPLIT.csv Split-transaction links (child htrn → parent htrn, split index).
TRN_XFER.csv Transfers between your own accounts (from/to account + amount).

Helper utilities

Three small inspection tools are included (same run command, different class):

# List tables with row/column counts
./mvnw -q compile exec:java -Dexec.mainClass=mny.MnySchema -Dexec.args="file.mny"

# Show column names/types for the core tables
./mvnw -q compile exec:java -Dexec.mainClass=mny.MnyCols -Dexec.args="file.mny"

# Print the first 12 transactions with resolved names
./mvnw -q compile exec:java -Dexec.mainClass=mny.MnySample -Dexec.args="file.mny"

Why the MSISAM / "encryption" step

A .mny file stores its pages in the MSISAM format rather than plain Access layout. Jackcess's default codec throws "Decoding not supported" for those pages. The jackcess-encrypt dependency supplies the MSISAMCryptCodecHandler that decodes them. For an unpassworded file you pass an empty password string — no actual decryption is needed unless you set a password in Money. If your file does have a password, edit the CryptCodecProvider("") calls in the sources to pass it.

Notes on the data

  • amount is negative for spending, positive for income/credits.
  • Rows with a blank category are usually not missing data: transfers (which Money never categorizes) and split-transaction parents (whose category lives on the child rows) both show a blank parent category.
  • When computing total spending, exclude transfer rows (htrn in TRN_XFER.csv) and split-parent rows (htrn in TRN_SPLIT.csv as htrn_parent) to avoid double-counting.
  • CSVs are written with a UTF-8 BOM so Excel reads non-ASCII payees correctly.

Building

./mvnw clean package        # produces target/mny-to-csv.jar

License

MIT