Workflow & Automation

One Design, Two Hundred Names: Designing From a Spreadsheet

An old printing idea that turns an evening of copy and paste into one click.

Somebody needs two hundred name badges by Thursday. The spreadsheet with all those names already exists, and typing them a second time is pure waste.

A dialog generating a layout from a description

Somebody needs two hundred name badges by Thursday. Or forty certificates, or price tags for a whole product range, or a graphic for every speaker at a conference. The instinct is to open the design, change the name, export, change the name, export, and lose an evening.

There is an old printing idea that solves this completely, it is called mail merge, and it is one of my favorite things to set up because the payoff is so absurdly disproportionate to the effort.

The whole concept

You have one design and a table. Each row of the table is one output. Wherever the design says {{name}}, the generated copy says whatever is in the name column for that row.

That is it. A spreadsheet with two hundred rows becomes two hundred images, each one identical in layout and different in content, and the whole run takes about as long as making three by hand.

What makes it feel like a superpower rather than a gimmick is that the spreadsheet is usually something you already have. The registration list. The product export. The class roster. Somebody has already typed all those names, and typing them a second time into a design tool is pure waste.

Setting it up, start to finish

1. Put placeholders in the design

Type the placeholder directly into the text layer, curly braces and all: {{name}}, {{role}}, {{price}}, {{date}}. Any name works, as long as you can remember it. Style the layer exactly as you want the final text to look, because the style stays and only the words are replaced.

I write the placeholders as realistic dummy content, so {{name}} sits where a name goes and looks roughly the length of a name. It makes the design decisions honest.

2. Make the columns match

Your CSV needs a header row, and the headers need the same names as your placeholders. A column called name feeds {{name}}. That is the entire mapping step, which is why I like it: there is no mapping screen to get wrong.

Export from any spreadsheet as CSV. If you are not sure of the format, grab the sample file that the merge dialog offers and open it, then match its shape.

3. Run it

Automation, Images, Generate from CSV. Load the file, choose which column supplies the file name, and go. Every row renders the current document once and saves it to the media library.

Generate from CSV is part of WunderPaint Pro. The placeholders in the text layers work in the free plugin; the run over every row does not.

Pick your file name column carefully. Names are tempting and collide the moment you have two people called Anna. An ID column, or a combination like 2026-badge-0031, sorts properly and never overwrites anything.

A dialog for generating a full layout from a description
The design still lands as ordinary editable layers, which matters when row 112 turns out to need a nudge.

The design problems that only show up at scale

This is the part nobody tells you, and it is where the interesting work is.

Names are not the length you designed for. You test with “Anna Meier” and the file contains “Maximilian von Bredow-Hartmann”. Give the text layer a font size range so it shrinks to fit, and check the longest entry in your data before you run. Sorting the spreadsheet by text length for a second takes no time and shows you the worst case immediately.

Empty cells happen. Somebody has no job title. If the layer just disappears when its value is empty, your layout has to still look right without it, which usually means centring the block rather than positioning each line absolutely.

Numbers need formatting before they arrive. A price column will happily contain 19.9 and render as “19.9” instead of “19.90”. Fix that in the spreadsheet, where you have actual formatting functions, rather than trying to solve it in the design.

Accents, umlauts and non-Latin scripts. Save the CSV as UTF-8 and check one row with an accent before you commit to the batch. A run of two hundred badges with mangled characters is a very specific kind of Thursday.

Things I use this for that are not name badges

  • Price tags and shelf labels from a product export. The design stays constant, the prices stay current, and reprinting after a price change is a re-run rather than a project.
  • Quote cards for social, one per row, from a list of quotes I collect over a month.
  • Speaker and session graphics for an event, generated from the same schedule that feeds the website.
  • Certificates and course completions, with the date column filled by a formula so it is always correct.
  • Team pages, where every person gets an identically framed portrait card.
  • Test data for a design, honestly. Thirty rows of realistic content is the fastest way to find out whether a layout actually works.
A template library showing layouts in several shapes
Save the merged design as a template and next year’s run is a new spreadsheet and nothing else.

Do a dry run of three

The one habit worth building: before the full batch, cut the file down to three rows and run those. Pick the shortest entry, the longest entry, and one with an empty cell somewhere.

Those three tell you almost everything that could go wrong across two hundred, and finding it now costs a minute instead of a re-run and a conversation about why the badges have to be reprinted.

Why I keep coming back to it

There is something deeply satisfying about the moment the run finishes and the media library fills up with two hundred correct images. But the real value is subtler: because generating is cheap, you stop rationing.

You make the graphic for every session instead of only the keynote. You reprint the shelf labels when the price actually changes rather than at the end of the quarter. The work stops being a cost you avoid and becomes something you just do, and that changes what you are willing to attempt.

Table of Contents

Learn it by building something

Every week one thing you can make the same afternoon, from dynamic templates to 3D type. Written down step by step.

One mail a week, and then it ends.
Unsubscribe in one click.

Free

Chaos Art

Autonomous painters make one-of-a-kind abstract art in 3D space - gestures, art movements, painterly media, and embeds that paint a new original for every visitor.

Download the free WunderPaint Plugin for WordPress

The Image Editor & Design Studio

Everything described here can be done in the browser, on your own site. The live demo runs the full editor with nothing to install.

Design Tools

Brush & Paint Styles

Paint with six styles that mix pigment instead of blending it, pick from thirty-seven tips shown as real strokes, draw a tip of your own out of shapes, and let the color travel along the stroke.

Workflow & Automation

Dynamic Templates: Build the Design Once, Let Your Posts Fill It In

You build the layout once, tell a few layers where to get their content, and from then on every post, product or page renders its own version.

Print & Craft

Making Things That Fold: Dielines, Duplex and Why Previews Matter

A gift box, a paper crane, a bunting banner. They look simple, and they fail in ways flat design never does, because there is a second geometry underneath.

WordPress Images

Why Should a Design Become a File at All?

Every static graphic on a page is a snapshot of what was true when somebody exported it. There is a whole category of quiet wrongness that follows from that.