The goal of this project is to be able to import any exported CSV (comma or semi colon separated) data from any bank account into a standard format, with everything such as CSV separator and column headings auto-detected. It's a work in progress. Please try it, and if some CSV file doesn't work for you, let me know.

Example

const bankImport = require("bank-csv-importer");

let result = bankImport(csvText); // May throw an error if input text is malformed
console.log(result);

After importing a CSV file, the result is:

{
	header, // The header row, if one was present and it was autodetected. null if not present.
	records : [], // records, split by separator and with header line removed
	typedRecords : [], // same as above but with some fields converted to Date or Number where possible
	numColumns,
	// For each column, whether all the typedRecords in that column are of the same type
	// Will be null if there are mixed types
	entireColumnTypes : ["String", "Number", "Date", null],
	headerGuesses : { // if any of these could not be guessed it will be null
		date : 0,
		amount : 1,
		balance : 2,
		description : 3
	}
}

Also some parse* functions are exported, which can be useful if you don't want to rely on typedRecords.

const {parseNumber, parseDate} = require("bank-csv-importer");

// Return null if could not be parsed
// parseDate uses "any-date-parser" and will greedily parse a lot of things as dates, so it's best to use parseNumber first,
// and if that fails, try parseDate.
console.log(parseNumber("1.123"));
console.log(parseDate("1/1/2021"));