如何将 Excel 数据合并到标签模板中,无需复制粘贴
你有一个包含几百行产品数据的电子表格,还有一个你喜欢的标签设计。任务听起来很简单:把正确的值放到正确的标签上。然后你打开第一个标签,从第 1 行读取 SKU,输入进去,从第 1 行读取价格,输入进去,然后意识到你刚刚给自己安排了好几个小时的转录工作——而且第 87 行附近肯定会有一个错别字。
本指南展示另一种方法:将你的 Excel 文件变成实时数据源,用变量字段将其绑定到标签模板,然后为每一行生成一个正确的标签。无需复制粘贴,无需逐行编辑,电子表格与货架之间不会出现偏差。
这里描述的工作流使用 RSJ LPSNG 的托管 UI,这是 RSJ Software GmbH 的下一代标签打印系统。它原生支持将 Excel 文件作为数据和查找源。如果你已经知道自己想要代码优先的路径(Web 服务 API、命令行播放器、Python 字段脚本),这些也存在——我们会在相关步骤的末尾指出它们,但步骤本身仍保持在 UI 中。
前提条件
在开始之前,请确保你拥有:
- 对 RSJ LPSNG 的访问权限——云版本、嵌入式版本(例如在单板计算机上),或企业部署。核心功能,包括标签工作室和作业队列,在所有版本中都存在。
- 一个标签模板,或者五分钟在标签工作室中创建一个。
- 一个 Excel 文件(.xlsx 或 .xls),带有标题行,每行对应一个标签。
- 一致的列名——没有尾随空格,没有重复的标题,没有多余的合并单元格。
- 对标签字段有基本的心理模型。 简单的合并不需要脚本。你需要知道标签上的哪段文本或条形码应该来自哪一列。
- 可选:一个查找文件。 如果你想丰富你的主数据——从第二个工作表拉取长描述、供应商名称或类别——RSJ LPSNG 支持将 Excel 作为查找源,而不仅仅是数据源。
本指南有意不做两件事:它不会教你连接外部系统的 OAuth2 注册流程,也不会带你走原始的 Web 服务 API。那些是做一次性合并的困难方式。当你需要无人值守的自动化时使用它们,而不是当你今天需要 400 个标签时。
步骤 1:准备你的 Excel 数据文件
你的电子表格就是你的数据库。像对待数据库一样对待它。
将其结构设置为第一行是标题行,后续每一行恰好对应一个标签:
| ProductName | SKU | Price | Barcode |
|---|---|---|---|
| Espresso Blend 250g | ESP-250 | 8.90 | 4012345678901 |
| Filter Roast 500g | FIL-500 | 12.50 | 4012345678918 |
然后清理它:
- 删除合并单元格。 合并单元格会破坏按行映射,因为一行不再能被读取为一组扁平的值。
- 删除数据范围中间的空白行。 一个空白行就是一个没有任何内容的标签。
- 规范化标题名称。 就映射层而言,
Product Name和ProductName是不同的列。选择一种约定并坚持使用——没有空格,没有标点,与你稍后使用的大小写一致。 - 注意特殊字符。 非 ASCII 字符(变音符号、重音字母、货币符号)需要一致的编码。将文件保存为 UTF-8,并在整个链条中保持相同的编码。
- 保存为 .xlsx,如果工作簿包含多个工作表,请记下工作表名称。
在上传任何内容之前,从带有 Python 和 pandas 的 shell 中进行快速健全性检查:
python - <<'PY'
import pandas as pd
df = pd.read_excel("products.xlsx", sheet_name="Data")
print("columns:", df.columns.tolist())
print("rows:", len(df))
print("blank rows:", df.isna().all(axis=1).sum())
print("duplicate headers:", df.columns.duplicated().any())
PY
如果行数与你预期的一致,并且没有空白行,就继续。
如果你的标签数据分布在多个表中,而你不想把它们粘贴到一个工作表中,那就不要这样做——保留一个干净的数据文件,并计划在步骤 3 中将其余部分作为查找文件进行连接。
步骤 2:设计带有变量字段的标签模板
打开标签工作室并创建一个新模板,或打开一个现有模板。
重要的部分是:标签上的文本、条形码和图像元素必须是变量字段,而不是静态文本。静态文本元素永远显示 “Espresso Blend 250g”。变量字段显示 “ProductName 列对该行所说的任何内容”。
所以:
- 在你想要的位置和大小添加元素。
- 将每个元素标记为变量字段/占位符。
- 将每个字段命名为与其 Excel 列标题完全匹配。 字段
ProductName映射到列ProductName。这个命名步骤是整个合并工作的关键,也是大多数首次尝试失败的地方——参见故障排除。 - 对于条形码,选择受支持的 1D 或 2D 格式,并将元素绑定到 SKU 或条形码列。格式很重要:EAN-13 条形码需要 13 位数字,因此将其绑定到自由文本 SKU 列会产生可以打印但无法扫描的内容。受支持的格式记录在条形码格式参考中,如果你希望在问题到达打印机之前发现它们,还有一篇关于在打印标签前验证条形码质量的单独演练。
保存模板。你现在有了一个带有命名孔洞的布局。
步骤 3:将 Excel 连接为数据源
在打印作业或模板设置中,选择 Excel 作为数据源类型。
然后:
- 提供文件。 上传你的
.xlsx或指向文件位置,具体取决于你运行的版本——云版本接受上传的文件,而嵌入式或本地部署可能从你控制的路径读取。 - 选择工作表,如果工作簿有多个工作表。
- 将每个变量字段映射到其 Excel 列。 界面显示第一行的预览,以便你在提交完整运行之前目视确认绑定。这个预览是整个过程中最便宜的错误检查。
- 添加查找文件(可选)。 指定第二个 Excel 文件和要连接的键列——通常是
SKU。仅存在于查找文件中的字段随后可用于映射,因此数据文件中的短代码可以解析为标签上的完整产品描述。
将数据源配置与模板一起保存。
步骤 4:生成并打印标签
现在选择你的输出。RSJ LPSNG 可以生成 PDF、渲染 PNG、直接打印,或者驱动电子货架标签(如果这是你的目标媒介)。
选择你想要的行:
- 所有行——完整生产运行的常见情况。
- 行范围——用于拆分大型作业或重新打印某一部分。
- 筛选的行——例如,仅自上次运行以来发生变化的 SKU。
启动作业。系统处理每一行,用该行的值替换每个占位符,并为每一行生成一个标签。一个 400 行的电子表格在单个作业中变成 400 个标签。
如果你超出了按钮操作的范围,同样的任务可以从代码触发:Web 服务接口接受打印作业,并可以将单个标签渲染为 PDF 或 PNG,而 LPSNG Player 是一个独立的命令行引擎,接受包和数据并生成 PDF、PNG、JSON、直接打印或 ESL 输出。对于像这样的合并,你不需要其中任何一个——但当真相来源是 ERP 而不是拿着电子表格的人时,那就是它们发挥作用的地方。
步骤 5:验证合并是否正确工作
在真实材料上打印 400 个标签之前,请验证:
- 行数匹配。 使用作业队列或日志确认生成的标签数量等于数据行数。
- 抽查边缘。 打开第一个标签、最后一个标签和中间的一个。边缘行可以捕获第一行预览不会显示的差一映射错误。
- 检查空值。 渲染为空的字段通常意味着从未绑定的映射,或源数据中的空单元格。
- 检查截断。 长值可能溢出固定大小的文本元素。如果你的描述字段是可变长度的,请使元素足够宽或在源头缩短数据。
- 扫描条形码。 不是目视——用扫描仪。一个能渲染但无法解码的条形码比没有条形码更糟糕。
- 确认查找连接。 如果你使用了查找文件,请检查连接的字段(描述、供应商、类别)是否实际出现,以及缺失的键不会静默地产生空白。
一旦这六项检查通过,合并就是可信的。
故障排除常见问题
| 症状 | 可能原因 | 修复 |
|---|---|---|
| 字段渲染为空 | 变量字段名称与列标题不匹配 | 重命名字段或标题,使它们完全匹配 |
| 某些标签缺失,其他重复 | 电子表格中的空白或合并行 | 清理数据文件并重新上传 |
| 上传失败或数据看起来过时 | .xlsx 仍在 Excel 中打开(文件锁定) |
关闭 Excel,保存,然后再次上传 |
| 字符乱码 | 非 ASCII 数据的编码不匹配 | 保存/导出为 UTF-8 并保持编码一致 |
| 条形码打印但无法扫描 | 格式和数据不匹配(例如 EAN-13 需要 13 位数字) | 将格式与数据匹配,然后验证打印质量 |
| 作业耗时很长或超时 | 单个作业中有数千行 | 将文件拆分为批次,或迁移到 Web 服务 API 进行批处理 |
大小写敏感性是其中最隐蔽的。根据版本不同,productname 和 ProductName 可能不会被视为相同的字段名。在步骤 1 中确定一种约定,并在步骤 2 中逐字使用它。
常见问题
我可以在一个打印作业中使用多个 Excel 工作表或文件吗?
RSJ LPSNG 支持将 Excel 文件作为数据和查找源。你可以使用一个主数据文件加上一个或多个查找文件来丰富你的标签。你是否可以在单个工作簿中处理多个工作表取决于版本——请查看 Excel 接口文档以了解你的部署的具体情况。
当我的 Excel 数据发生变化时,如何更新标签?
在数据源设置中替换文件,或重新上传更新后的工作簿。下一个打印作业使用新数据——只要列结构保持不变,就不需要更改模板。对于无人值守的工作流,你可以通过 Web 服务 API 或 LPSNG Player 触发新作业。
是否可以将 Excel 和数据库的数据合并?
Excel 接口围绕 Excel 文件作为数据和查找源构建。对于数据库,通常的模式是将查询结果导出到 Excel 并将其用作数据文件,或者完全跳过文件并通过 Web 服务 API 以编程方式提交数据。当你需要在渲染期间进行高级数据操作时,可以使用 Python 字段脚本 API。
如果我的标签模板需要基于 Excel 值的条件逻辑怎么办?
你可以使用 Python API 将 Python 脚本块附加到单个标签字段。这些脚本可以在打印前读取和修改字段的值——这就是你获得条件格式、单位转换或从 Excel 数据派生的计算值的方式。说明性示例:
# Illustrative: a field script can read and rewrite its value before printing
value = (field.value or "").strip()
if value == "":
field.value = "N/A"
elif value.startswith("PROMO-"):
field.value = value.upper()
当规则实际上是关于标签的外观时,将逻辑保留在脚本中而不是电子表格中。
从电子表格到货架,无需苦干
你现在已经拥有了完整的循环:一个干净的 .xlsx,一个字段以你的列命名的模板,一个带有可预览字段映射的 Excel 数据源,以及一个将每一行变成自己标签的打印作业。相同的设置可以处理用于丰富数据的查找文件、绑定到真实列的条形码,以及作为输出目标的电子货架标签——因此工作流可以从五行测试扩展到完整生产运行,而无需改变形态。
这就是使用标签平台而不是邮件合并宏的意义:数据保持在你团队已经维护的格式中,标签保持正确。对于跨设备持续运行的仓库和履行场景,包装线工作流直接建立在你在这里配置的基础上。
在你自己的文件上尝试:先用云版本运行一个小型导出,确认预览映射,然后扩大规模。Excel 接口文档涵盖了查找文件和更精细的细节,当你准备进一步深入时。
