Excel 数据文件和查找表创建标签的方法
你的订单在 Excel 里。你的产品名称在 Excel 里。你的地址在 Excel 里。然而,每次你需要标签时,总有人打开电子表格,复制一行,粘贴到模板中,保存为 PDF,然后重复——重复四十次。更糟的是,有人在两年前写了一个脆弱的脚本,每当列名被重命名时就会出错。
本文介绍另一种方法:使用一个 Excel 文件作为数据源,用第二个 Excel 文件(或第二个工作表)作为查找表,然后生成成品标签,输出为多页 PDF、单独的 PNG 图片或直接发送到打印机——无需复制粘贴,也无需维护解析器。
最终你将获得:
- 一个数据文件,每行对应一个标签,表头行将成为你的字段名称。
- 一个查找表,将
SKU等键解析为完整的产品名称或类别。 - 在 LPSNG 标签工作室中设计的标签布局,字段已映射到电子表格列。
- 一个可重复的作业流程:修改电子表格,重新运行,获得新标签。
Next Generation Label Printing System 为你处理渲染、作业队列和输出。如果你想用 Python 转换单个字段值而不是简单的映射,这在 面向 Python 开发者的标签打印 API:字段脚本 中单独介绍——本文专注于电子表格路径。
前提条件:开始之前你需要什么
- 一个具有标签工作室和作业队列访问权限的 RSJ LPSNG 版本。 Cloud Solution、Embedded Edition(如 Raspberry Pi 之类的单板计算机)和 Enterprise Features 都提供相同的核心功能。
- 你的 Excel 数据文件,每行对应一个标签——例如商品编号、描述、价格。
- 可选的一个单独的查找文件(或单独的工作表),将键——例如商品编号——映射到你实际想要显示在标签上的文本,如完整的产品名称或类别。
- 一个标签布局。 可以是你在 LPSNG 标签工作室中构建的布局,也可以是想要用电子表格数据填充的现有布局。
- 清楚知道哪一列属于哪个字段。 如有需要,先在纸上画出来;这里花五分钟可以节省一小时的重新映射时间。
Excel 接口的文档位于 lpsng.rsj.de/en/excel。除了浏览器之外,无需本地安装;打印机设置是唯一需要在本地完成的部分。
步骤 1:准备 Excel 数据文件和查找表
将数据文件结构化为带有表头行的格式,因为每个列标题都会成为你之后可以映射的命名字段。
SKU,Description,Price,Quantity
A-1001,Steel bracket 40mm,4.90,1
A-1002,Steel bracket 60mm,5.40,2
A-1003,Aluminium bracket 40mm,6.10,1
然后将查找表构建为单独的工作表或文件,包含一个键列和要合并的值:
[
{ "SKU": "A-1001", "ProductName": "Steel Bracket, 40 mm, galvanised", "Category": "Hardware" },
{ "SKU": "A-1002", "ProductName": "Steel Bracket, 60 mm, galvanised", "Category": "Hardware" },
{ "SKU": "A-1003", "ProductName": "Aluminium Bracket, 40 mm", "Category": "Hardware" }
]
几条规则可以避免大多数后续的麻烦:
- 保持键一致。 两边的拼写、格式和大小写都要相同。
- 删除合并单元格和空行。 它们会破坏列映射,并可能使检测到的表头行发生偏移。
- 注意前导零。 如果
SKU是0042,请在 Excel 中将该列强制设为文本——否则键会变成42,查找会静默失败。 - 一个文件就够了。 你可以将数据和查找表放在同一个工作簿的不同工作表中。
在上传之前,用 pandas 快速做一次健全性检查,可以及早发现键不匹配的问题:
import pandas as pd
data = pd.read_excel("orders-october.xlsx", sheet_name="Data", dtype=str)
lookup = pd.read_excel("orders-october.xlsx", sheet_name="Products", dtype=str)
# Normalise the join key identically on both sides.
for df in (data, lookup):
df["SKU"] = df["SKU"].str.strip().str.upper()
orphans = sorted(set(data["SKU"]) - set(lookup["SKU"]))
print(f"{len(data)} data rows, {len(orphans)} keys without a lookup entry")
print(orphans)
如果 orphans 为空,那么你的查找表将为每一行成功解析。
步骤 2:在 LPSNG 中设计或打开你的标签布局
打开 LPSNG 标签工作室,创建一个新布局或打开一个现有布局。
- 为描述和价格添加文本字段,为商品编号添加条码字段,如果你想要徽标或产品照片,还可以添加图像字段。
- 为每个字段取有意义的名称——
field_product_name、field_price、field_sku——这样六个月后,从电子表格列到标签字段的映射仍然一目了然。关于条码方面,支持的 1D 和 2D 格式列在 lpsng.rsj.de/en/barcode。 - 预留足够的空间。 电子表格中的值并不统一:第一行可能是简短的描述,第五十行可能会换行成三行。宁可留出空间,也不要之后缩小字体。
- 只在需要时转换值。 格式化价格、连接两列或计算校验位,是附加到字段的 Python 脚本块的工作,详见 Python API 参考文档 lpsng.rsj.de/api。
保存布局。它将成为你 Excel 文件中每一行的模板——设计工作只需做一次。
步骤 3:将 Excel 列映射到标签字段
在 LPSNG Excel 接口中,上传或选择你的工作簿作为数据源,然后将每一列分配给一个字段。对于查找值,指定查找工作表或文件以及键列;LPSNG 会在渲染之前逐行解析查找,因此标签字段接收的是合并后的值,而不是原始键。
映射界面表达的内容大致如下——界面会为你写入配置:
# Illustrative shape of the mapping you configure in the Excel interface.
layout: product-label
data_source:
file: orders-october.xlsx
sheet: Data
fields:
field_sku: SKU
field_description: Description
field_price: Price
lookup:
file: orders-october.xlsx
sheet: Products
key: SKU
merge:
field_product_name: ProductName
field_category: Category
output:
format: pdf
然后用前几行预览映射。预览是你发现列偏移或价格落入描述字段的地方——在浪费一卷标签之前。
这是编写自定义解析器或搭建命令行流水线的托管替代方案:映射本身不需要代码。
步骤 4:将标签渲染为 PDF、PNG 或发送到打印机
选择你的输出:
- 多页 PDF——非常适合存档、通过电子邮件发送或交给印刷店。
- 单独的 PNG 图片——用于嵌入另一个系统或 Web 前端。
- 直接打印——选择打印机,作业队列将每一行作为单独的标签处理。
- JSON——当下游系统需要渲染结果或解析后的数据而不是纸张时。
对于自动化,可以从代码驱动相同的作业。Web 服务 API 提交打印作业,将单个标签渲染为 PDF 或 PNG,并支持直接打印;身份验证使用 OAuth2,文档位于 lpsng.rsj.de/en/webservice。独立的 LPSNG Player 接收包和数据,输出 PDF、PNG、JSON 或发送到打印机:
# Endpoint paths, flags and payload fields are documented on the web service
# and Player pages — the shape below is illustrative only.
curl -X POST "https://<your-lpsng-host>/…" -H "Authorization: Bearer $LPSNG_TOKEN" -d '{ "layout": "product-label", "data": "orders-october.xlsx", "output": "pdf" }'
lpsng-player --package product-label --data orders-october.xlsx --output pdf
如果你的团队使用 Google Sheets 而不是 Excel,Google Sheets 插件 在浏览器中提供相同的创建和打印工作流程。而且所有渲染都在服务器端进行——除了打印机设置之外,你无需在本地安装字体或驱动程序。
步骤 5:验证输出并检查查找
渲染成功并不等于渲染正确。检查生成的文件:
- 抽查几个标签与源行进行对比——第一行、最后一行以及任何格式不寻常的行。
- 确认查找已解析。 如果标签显示
A-1002而你期望的是 “Steel Bracket, 60 mm, galvanised”,说明键没有匹配。 - 用阅读器扫描几个条码,将解码值与预期数据进行比较。如何在打印标签前验证条码 提供了更完整的检查清单。
- 查看作业队列。 失败或被跳过的行会出现在那里,通常带有出错的值或脚本错误。
- 如果你附加了字段脚本,确认转换已应用——错误的日期格式很容易被忽视,直到有人在货架上读到标签才会发现。
常见问题排查
标签打印时字段为空。 检查列标题是否与映射的字段名称完全匹配,以及数据文件在表头上方没有前导空行。顶部的一个空行会导致所有内容偏移。
查找没有返回任何结果。 键列必须在大小写、前后空格和前导零方面匹配。如步骤 1 所示,对两边进行规范化。
条码扫描不正确。 验证条码字段是否映射到正确的列,以及所选格式是否能承载你要编码的数据长度。
只有部分行渲染失败。 检查作业队列中的错误消息。常见原因是布局所需的某个值缺失,或字段块内的脚本错误。
打印机没有收到任何内容。 确认打印机在线并在输出设置中被选中。对于 Google Cloud Print 场景,请参阅 云打印 文档。
常见问题
我可以将同一个 Excel 文件同时用于数据和查找吗? 可以。将数据放在一个工作表中,将查找表放在同一工作簿的另一个工作表中。映射时,为每个角色选择相应的工作表。只需确保用于查找的键列在两个工作表中保持一致。
我需要编写代码来将 Excel 列映射到标签字段吗? 不需要。LPSNG Excel 接口提供了一个映射界面,你可以将电子表格列分配给标签字段。只有在你想要转换值时——例如格式化价格或连接字段——才需要代码,你可以通过附加到字段的 Python 脚本块来实现(参见 Python API 文档)。
我可以从 Excel 数据生成哪些输出格式? 你可以生成多页 PDF、单独的 PNG 图片、将作业直接发送到打印机,或输出 JSON。Web 服务 API 和 LPSNG Player 支持这些输出,因此你可以将渲染集成到你自己的应用程序中。
当 Excel 文件发生变化时,如何更新标签? 只需重新上传更新后的 Excel 文件,或用新数据重新运行作业。LPSNG 会应用相同的标签布局和映射,因此你无需重新设计任何内容。作业队列将处理新行并生成更新后的标签。
结论:从电子表格到货架就绪的标签
工作流程很短:准备你的 Excel 数据和查找表,设计一次布局,将列映射到字段,渲染,验证。这个列表中的任何一项都不需要你编写解析器或照看脚本。
Next Generation Label Printing System 承担了繁重的工作——渲染、作业队列、查找解析和输出——这样你就可以把时间花在数据上,而不是管道上。无论你生产十个标签还是一万个标签,它的工作方式都一样,而且 Web 服务 API 允许其他系统以编程方式触发相同的作业。
在你的 LPSNG 版本中试用 Excel 接口——云端、嵌入式或企业版——如果你的团队更喜欢在浏览器中使用电子表格,请查看 Google Sheets 插件,在浏览器中获得相同的工作流程。
相关文章
- 面向开发者的 Zebra Designer 替代方案:需要比较什么
- 如何通过 API 将 ESL 标签连接到商品
- 厂商中立的 ESL 接口对开发者意味着什么
