Compare two tables

Compare two table versions by a unique key, showing additions, removals, data changes and row-position changes.

All processing is local, without automatic storage or input uploads. Combined UTF-8 text/files: at most 2 MiB; each table has at most 5,000 data rows, 100 columns, 100,000 cells and 20,000 UTF-16 units per cell. Output including BOM: at most 2 MiB; each worker or file-reading operation has a 5-second deadline.

Delimiters are explicit; leading zeroes, spaces and line breaks inside cells remain. Blank rows are not dropped and uneven rows are not padded. A final line terminator is not an extra record. Original files stay unchanged.

Table 1

The first row contains unique, nonempty headers; matching is exact and case-sensitive.

Table 2

The first row contains unique, nonempty headers; matching is exact and case-sensitive.

Read columns after entering tables or changing delimiters. Options show the column number and a name preview; selection uses the complete original name without changing spaces or line breaks. Reading again resets the key to the first column; review your choices before processing.

A unique nonempty key and the same header set are required. The report lists table-1 rows, then additions from table 2. moved means a changed row position, including shifts from an earlier insertion; it does not infer manual moves. The moved count overlaps modified or unchanged; do not sum these counters for a total. before/after and change are stable CSV identifiers, explained below.

added: new row; removed: deleted row; modified: changed data; moved: identical data at a different position; unchanged: identical data and position. before_row and after_row start at 1 excluding headers; order_changed is true or false. Hiding unchanged rows does not hide moved rows.

CSV quotes every cell and uses CRLF; downloads include a UTF-8 BOM, while copy does not. The system clipboard may normalize line breaks inside cells too; use the download to preserve their original line breaks. The default policy prefixes an apostrophe before potential leading =, +, -, @, tabs or line breaks, including headers and negative numbers. Only the export copy changes. Literal export can be interpreted as formulas by a spreadsheet application; review import-as-text settings.

How to use

Put the previous version in table 1 and the new version in table 2. Set their delimiters, read columns and select the comparison key. Include unchanged rows if needed, then process, review before/after fields and change counts, and download the report.

Try an example

If id=1 changes value but stays in place it is modified; if id=2 changes row position without data changes it is moved. A new row is added and a missing row removed. Inserting a first row can shift later positions without changing their data.

Support & limits

There is no fuzzy matching: keys are exact, unique and nonempty, and header sets must match even if column order differs. The report lists A rows followed by additions from B. before_row and after_row are 1-based data-row positions. modified describes changed data; moved describes a new position with identical data. order_changed also flags position changes in modified rows. The unchanged count includes all identical-data rows, including moved rows; moved overlaps modified/unchanged, so these counters must not be summed as a total. Hiding unchanged rows does not hide moved rows. Stable report status names are explained in the interface.

Common questions

Does a changed row number prove someone manually moved it?

No; the tool compares positions only. It does not know the cause of a change or who edited a file. Row identity depends on the key you select. CSV quotes all cells and uses CRLF while preserving line breaks inside cells. Downloads include a UTF-8 BOM; copy does not. The system clipboard may normalize line breaks inside cells too; use the download to preserve their original line breaks. By default, formula-like cells, including headers and negative numbers, receive an apostrophe in the export copy only. Literal export leaves them unchanged, but a spreadsheet application may interpret them as formulas. Review import-as-text settings. The preview limits displayed rows and columns; copy and download include the complete result.

Related tools