Batch printing from spreadsheets
Design one label with placeholders, import your data, and export selected rows. Imports support up to 5,000 rows within file and cell limits; split large exports into smaller ranges within the output limits. Review values and test one label before printing a batch.
1. Design with placeholders
Section titled “1. Design with placeholders”Put {{Column Name}} anywhere text or a barcode value goes — the Field
tool in the toolbar lists your imported columns so you don’t have to type
them. A barcode whose value is {{SKU}} uses that row’s value. Encoding checks
do not establish ownership of an identifier or guarantee a successful scan.
2. Import your data
Section titled “2. Import your data”Import data in the top bar accepts four sources:
- File upload —
.xlsx,.xls,.ods,.csv,.tsv. Store identifiers as text in the source spreadsheet and check the import preview. Leading zeros or digits already lost to spreadsheet rounding cannot be recovered by import. - Google Sheets — use a link only for a sheet already intended for
Anyone with the link access. Do not widen sharing on private order/contact
data: download a file or paste cells instead. A
#gid=selects a tab for import; it does not make other tabs in the shared spreadsheet private. - Paste — straight from Excel or any table.
- Manual grid — type rows in place.
Columns auto-match your placeholders; warnings flag anything unmatched or empty. Blank cells collapse — no gap lines from a missing address line 2.
3. Placeholder syntax
Section titled “3. Placeholder syntax”Everything after the column name is optional, so a bare {{SKU}} prints
exactly what the cell holds.
| Placeholder | Prints |
|---|---|
{{SKU}} |
the row’s value for the SKU column |
{{#}} |
this label’s sequence number |
{{date}} |
today, as 2026-08-27 |
{{date+30}} |
30 days out; {{date-7}} goes back a week |
{{expiry+30}} |
30 days after the date in your expiry column |
{{date|mdy}} |
today, as 08/27/2026 |
{{sku|upper}} |
the value uppercased |
{{qty|pad5}} |
00042 — zero-padded to 5 characters |
{{name|cut20}} |
the first 20 characters |
Column names are matched without regard to case. A column actually named
date or # wins over the built-in of the same name.
Dates and offsets
Section titled “Dates and offsets”{{date}} is the day you generate the batch — one date for the whole run,
even one that crosses midnight. Add + or - and a number of days to shift
it for date arithmetic. The tool does not determine shelf life, safety dates or
regulatory labeling rules; supply and verify dates appropriate for your product.
The same offset works on your own data. With an expiry column holding
2026-01-15, {{expiry+30}} prints 2026-02-14 — the shift is from the
cell, not from the day you print. Cells have to be real dates to shift:
2026-01-15 or 20260115, which is what the importer writes for a date
cell. A cell in any other form prints exactly as typed rather than being
read as a date and guessed at.
Date formats
Section titled “Date formats”Add a format name to any date placeholder:
| Format | {{date|format}} |
|---|---|
iso (the default) |
2026-08-27 |
yyyymmdd |
20260827 |
yymmdd |
260827 |
mdy |
08/27/2026 |
dmy |
27/08/2026 |
Every format emits digits, - and / only, so a date inside a Code 39 or
GS1-128 payload still renders. yymmdd is the GS1 date form for a (17)
expiry or (11) production date.
Transforms
Section titled “Transforms”Chain transforms with |; they run left to right.
| Transform | Does |
|---|---|
upper, lower, trim |
case, and surrounding whitespace |
digits |
strips everything but 0–9 — for EAN, UPC, ITF |
padN |
zero-pads to N characters |
cutN |
keeps the first N characters |
{{name\|trim\|upper\|cut20}} is a valid chain. cutN counts characters as
you see them, so an emoji or a CJK ideograph is never cut in half. A
transform name that isn’t in this table leaves the value alone — a typo
never blanks a label.
4. Sequences, repeats, ranges
Section titled “4. Sequences, repeats, ranges”{{#}}inserts a sequential number with a start value, step, zero padding, and prefix —INV-0001,INV-0002, …- {{#}} counts by is the step.
2numbers every other unit;-1counts down, ending the run at 1 (set a start value to count down from your own number instead). - Print each ×N prints multiples per row (two per cable end, three per moving box).
- Row ranges like
1-50, 60reprint parts of a run without regenerating everything.
Imports hold up to 5,000 rows. The first 2,000 are saved with the design — rows past that print fine now but need re-importing after a reload.
5. Preview and export
Section titled “5. Preview and export”Preview renders real labels from your first rows — check a barcode scans before committing. Generate produces one PDF with a label per row (or imposed N-up on Avery sheets, with a start-position offset for partially used sheets).
Invalid rows — say, a bad EAN check digit — are flagged and their barcode is left off the label rather than printing stale data.