Skip to content

Excel column transfer — match rows by key, fill an existing form

Pick a source file and a target file, match their rows by a primary key, then copy the columns you choose into the target. The target keeps its formatting, and everything runs in your browser. The form you have to file cannot be reformatted, the data sits in another file, and the two spellings of each name are not quite the same.

When you reach for this

  • A monthly form has a fixed layout while the data lives in another file, and the copying is done row by row.
  • The names or IDs on the two sides are not identical, the source carries an extra suffix, and VLOOKUP finds nothing.
  • The blank form from the authority has borders, merged cells and a page footer that ordinary tools destroy.
  • A few people joined this month and their rows have to be appended in the same formatting as the rest.
  • The form to fill is split across several sheets and all of them have to be done in one run.
  • The same transfer has to run every month and nobody wants to set it up again each time.

The one thing this tool does

It takes columns from a source file, finds the right row in a target file by a key, and writes them there. Both files may hold several sheets, and the matching and writing happen once per target sheet.

  • The source file provides the data and is never modified.
  • The target file is the one you have to file, and the tool produces a copy of it.
  • The key decides which row goes with which, and the fields decide which column fills which.
  • Source rows with no counterpart are appended rather than dropped.

The interface is in Traditional Chinese only

The tool itself is in Traditional Chinese and the language switch does not change it. That is deliberate: the people using it are administrators filing forms, and matching the wording on those forms matters more than matching the rest of the site. This explanation is available in both languages.

What each of the four steps decides

All four steps sit side by side on one screen. You work left to right and you are done.

StepWhat it settles
1 FilesThe source file, the target file, and optionally a config exported earlier
2 KeysWhich target sheets get filled, and the key column on each side
3 FieldsEach target column, the source sheet and column it comes from, and any value replacement
4 ExportTransfer, download, and export the setup as a named JSON file

How the key is matched

There is a single rule: two rows are the same row when the target key is a prefix of the source key. Exported data so often carries a serial number appended to a name or an ID, and this rule exists for exactly that.

  • A target reading Wang Xiaoming matches a source reading Wang Xiaoming A123.
  • A target longer than the source does not match.
  • Whitespace and line breaks are stripped first, as everywhere else in this tool.
  • When one target value matches several source rows the topmost wins and a warning says so.
  • A source row is used once, so no two target rows receive the same record.
  • Target rows with a blank key are skipped, since those are usually the form's spare rows.

Unmatched source rows are appended

A source row that matches nothing is not an error. It is someone new, and it lands below the last row of data in that target sheet, in the order the source had them.

  • The key is written into the new row as well, so the same setup matches it next month.
  • Each new row copies the formatting of the last data row across every column.
  • Target rows with no source are left alone and counted in the messages.

How a field is specified

A field is one sentence: this target column comes from that column of that source sheet. One field binds one column of one sheet.

  • Different fields may come from different source sheets.
  • A field on the key's own sheet simply reads the matched row.
  • A field on another sheet is looked up there by the same key column, this time on equality.
  • A column is picked from the real headers, or by typing its letter such as Y, AA or AQ, and key columns work the same way.
  • Header names are never typed by hand, since a typo would silently skip a column.
  • A target column is remembered as a column letter, so picking B writes to B, with no further name matching.
  • A source column is remembered by name by default, because the source is re-exported monthly and its columns move.
  • When headers are blank or repeated, the column letter is remembered instead, since a name cannot tell those columns apart.
  • If that target header is edited later you get one warning, and the value still goes to the column you picked.
  • A field that cannot be resolved turns its row red and says why when the transfer runs.

Replacement rules and blanks

The same thing written differently on the two sides is the norm. A rule belongs to one field, and its cases are tried from the top down until one matches.

  • Exact matching requires the source value to equal the case.
  • Contains matching accepts the case appearing anywhere inside the source value.
  • Unmatched values are passed through by default, or replaced by a fallback if you ask for one.
  • With no rule the value is passed through, and numbers stay numbers so Excel can still total them.
  • A blank source value is never written and the target keeps what it had, and rules never see blanks.

Two-level headers and merged cells are understood

Real forms rarely put the whole header on one row. Column A merges its title down two rows while columns B and C share a category above their own sub-headings. The tool reads that shape.

  • However far the header row merges downward, that block is the header, and data starts below it.
  • A column merged vertically reads the same cell twice and stays one column, not two of the same name.
  • A category merged across columns is joined to each sub-heading, giving names like Meals / Shared.
  • Cells hidden under a merge are empty in the file, so every read resolves the merge first.
  • The dropdowns list exactly these names, so what you see is what gets matched.

How the header row and first data row are worked out

Real sheets rarely put the column names on row 1. Above them sit form titles, filing instructions and merged banners. The tool guesses, and every guess is editable on screen.

  • The header row is looked for in the first 10 rows and 80 columns only, taking the row with the most name-like headers; an all-numeric row does not count.
  • A guess landing on the sub-heading row is pulled back up to the top of the merge.
  • The first data row is found below the whole header block.
  • Rows containing a total keyword are skipped.
  • A blank row is skipped when the same row holds a formula reaching further down the sheet.
  • A formula that only sums its own row is not skipped, because that row is data.
  • One source sheet has one header row for the whole setup, wherever you edit it.

Why filling a form keeps its formatting

An ordinary Excel library re-serialises the whole workbook when it saves, and that is the step where headers and footers, drawings, printer settings and customXml disappear. A government return missing those is a return you cannot file.

This tool works differently. It treats the xlsx as an archive and edits only the content of the target sheets, copying every other entry through byte for byte, so all of the following survive.

  • Cell styles, borders and fills.
  • Merged cells, column widths and row heights.
  • Formulas in cells that are not written to.
  • Drawings, images and print setup.
  • Headers and footers, and the macros inside an .xlsm file.

Downloaded files are stamped with the transfer time

The result never shares the original file name. It is always the original name, then the date and time, then the original extension, for example visits_20260914_153012.xlsx.

  • The time is the moment you start the transfer, taken from your computer's clock.
  • The extension follows the original, so an .xlsm stays an .xlsm with its macros intact.
  • Running the same form several times leaves files that sort by time and never overwrite each other.

Keep a setup by exporting it

Nothing is written to browser storage and the previous setup is never loaded automatically. The only way to reuse one is to export a JSON config in step four and load it in step one.

  • The config holds target sheets, both key columns, header rows, first data rows, fields and rules.
  • You name the config file yourself, and a config you loaded keeps its name by default.
  • A sheet that no longer exists in this file is dropped and reported, never guessed at.
  • File paths are not kept, since a browser cannot and should not open files by itself.

What this tool deliberately does not do

  • No memory. No accounts, no cloud, no browser storage. Closing the tab clears everything, so export the config to keep a setup.
  • No built-in sheet or column names. Everything starts empty and is specified by you.
  • No fuzzy matching. Prefix is the only rule; there is no typo correction and no similarity score.
  • No support for the old .xls format. Save as .xlsx or .xlsm first; the tool blocks it and says so.
  • No overwriting files on your machine. Output is always a download, and name clashes are the browser's business.

Do your files leave this machine

No. Both files are read straight into memory by the browser, the matching, the writing and the export all happen in the same tab, no request carries the content anywhere, and nothing is written to browser storage. See the privacy policy for the details.

Frequently asked questions

Are the files uploaded anywhere?
No. This site has no backend and no conversion API. Both Excel files are read into memory by the browser, the matching and the writing happen in the same tab, and the downloaded file is assembled on your own machine. The data here is often a roster of named individuals, which is the reason the tool works this way.
What does prefix matching on the key mean?
Two rows are the same row when the target key is the beginning of the source key. A target reading Wang Xiaoming matches a source reading Wang Xiaoming A123, but not the other way round. It exists because exported data so often carries a serial number appended to the name or the ID.
What happens when one target value matches several source rows?
The topmost source row wins and a warning names the row and how many it matched. A source row is consumed once, so no two target rows receive the same record. That warning usually means the key is not distinctive enough, and a more identifying column is the better fix.
Are people missing from the target dropped?
No. Those rows are treated as additions and appended below the last row of data in that target sheet, with the key written in as well. Each new row copies the formatting of the last data row across every column, so the borders are complete.
The form has a two-level header with merged cells. Can it read that?
Yes. However far the header row merges downward, that whole block is treated as the header. A column merged vertically reads the same cell on both rows and stays one column, while a category merged across columns is joined to each sub-heading into names like Meals / Shared. Cells hidden under a merge are empty in the file, so every read resolves the merge first and none of them come back blank.
Does a blank source cell wipe out what the target already has?
No. A blank source value is never written, so the target keeps whatever was there. Replacement rules are never applied to blank values either, so a fallback value cannot overwrite a blank.
Does filling the form damage its formatting?
No. The tool treats the xlsx as an archive and rewrites only the target sheets, copying every other entry through untouched. Styles, merged cells, column widths, row heights, formulas, drawings, headers and footers and macros all survive. Ordinary Excel libraries cannot do this, because saving re-serialises the whole workbook, and that is the step where headers, footers and drawings are lost.
Can a setup be kept for next time?
Yes, by exporting it. The tool does not use browser storage to remember your setup and never loads the previous one automatically. Step four exports a JSON config and step one loads it back.
Does it read the older .xls format?
No. Save the file as .xlsx or .xlsm in Excel first. The tool blocks it and says so, rather than pretending to read it and producing an empty result.