
前阵子做固定资产盘点的朋友问我能不能把表格里上千条资产信息一次性转成二维码贴在设备上扫码就能查看详情。我说能而且方法不止一种。类似需求在职场里非常普遍做物料管理的要给每种料号生成条形码做会议签到的要给参会人员生成二维码做图书档案管理的要给每本书生成专属标签。很多人第一反应是去买专门的标签软件其实不需要你手头天天在用的WPS和Excel就能完成表格数据到二维码、条形码的批量转换关键是选对方案。这篇文章我把“在表格中批量生成二维码和条形码”的几种主流做法完整地梳理了一遍从最简单的WPS内置功能到Excel的IMAGE函数再到VBA宏和Python脚本每种方案适合什么场景、具体怎么操作、会踩到哪些坑都会讲到。如果你平时只会基础表格操作照着前三章就能跑通如果你想让整个流程自动化一点后面两章也能帮上忙。1. 批量生成二维码条形码之前先把方案想清楚1.1 什么场景下最需要“表格批量生成”这个功能先说场景因为很多人其实没有认真梳理过自己的需求看到别人做就也想做。最常见的几类固定资产生成二维码扫码后能查看设备编号、使用部门、购置日期库存管理给每个料号生成条形码出入库时扫码枪一扫就能调出数据会议或活动的签到码把参会人信息放进二维码里现场扫码自动登记图书档案管理给每本书或每份档案做唯一标识码贴在书脊或档案盒上还有商品外包装上的追溯码需要在出厂前批量打印出来。这些场景有一个共同点数据已经整整齐齐地躺在表格里了A列是编号、B列是名称、C列是备注缺的只是一个把表格内容变成图片的批量通道。如果人工一个一个去网上搜二维码生成器、复制粘贴内容、再下载图片几百条数据就能耗掉一整天而且越往后越容易出错不是漏了就是错码。所以批量生成不是图省事而是刚需。1.2 表格生成二维码条形码的四种主流方案对比选哪种方案主要看四件事数据量有多大、表格软件是什么版本、生成之后要图片还是要打印、你愿不愿意写一行代码。我用实际体验给这几种方案做个对比方案上手难度批处理能力必要条件最合适的场景WPS内置插入二维码/条形码低较强WPS较新版本个别功能需要账号几十到上千条的一次性任务Excel IMAGE函数低中Office 365能访问二维码服务接口数据会变动、需要公式联动VBA宏调用在线接口高强桌面版Excel、启用宏、网络畅通大批量且要把图嵌进表里Python脚本生成中高极强本机装Python环境上万条数据、还要出标签PDF我的建议是如果你现在就有一批数据急着出图先打开WPS试内置功能十有八九能满足如果你的表格更新频率高每次新加一行就想自动出现二维码用Excel的IMAGE函数最舒服如果数量大而且要精细控制图片位置VBA和Python才是最终答案。不要一上来就选最复杂的工具是拿来用的不是拿来炫的。每一种方案的背后都是一套不同的“图片处理逻辑”理解了这个逻辑后面出问题你才不会懵。2. 动手前的准备工作版本、环境与网络2.1 先确认你的表格软件是什么版本很多人卡在第一步其实是版本不对。WPS表格的“插入-二维码”功能在较新的版本里才有老版本或者某些精简版集成了但没有入口。Excel的IMAGE函数也是Office 365独有Office 2019及更早的版本里根本找不到这个函数。判断方法很简单在WPS里点“插入”菜单看有没有“二维码”和“条形码”入口在Excel里随便敲一个IMAGE看有没有弹出函数提示。没有也没关系后面有VBA方案和字体方案可以绕过去。还有一个特别容易忽略的点部分单位电脑装的是精简版、绿色版Office这种环境里ActiveX控件经常缺失建议先检查“开发工具-插入-其他控件”里有没有“Microsoft BarCode Control”这一项没有的话老老实实用字体法。版本检查这一步花不了两分钟但能帮你避开后面所有“功能找不到”“函数不识别”的尴尬。2.2 启用宏和安装Python环境如果用VBA方案需要在Excel或WPS里开启宏功能并调出“开发工具”选项卡。路径是“文件-选项-自定义功能区”在右侧主选项卡里勾选“开发工具”然后到“宏安全性”设置里选择“禁用所有宏并发出通知”这样运行自己的宏不会每次都被拦。这里提醒一句只运行自己写的或同事发来且确认安全的宏来历不明的宏文件不要开办公环境里这是安全意识底线。如果用Python方案需要先装Python解释器再用pip安装几个库qrcode用于生成二维码python-barcode用于生成条形码pandas和openpyxl负责读写表格。安装命令我放在第三章后面照抄就行。很多朋友一听到Python就觉得很难其实对于这种批处理任务你只需要写十几行代码剩下的事情库都帮你干完了。另外如果办公网络限制严格依赖第三方在线接口的方案可能不可行这时优先用WPS内置功能或Python本地生成因为这两个方向不依赖外部二维码服务数据也不出境合规上更让人放心。3. 表格里批量生成二维码的实操三个层级3.1 WPS表格内置功能最简单的批量生成路径操作步骤把需要生成二维码的数据整理在A列和B列例如A列编号、B列名称保证一列一个字段。选中数据区域点击菜单栏“插入”-“二维码”。在弹出的面板里确认“内容来源”选中的是数据单元格区域并设置“输出位置”一般选右侧空白列。设置二维码大小、间距等参数点击生成稍等几秒二维码图片就会按顺序铺到指定的列里。我实际用下来的感受是这个功能对普通办公室用户最友好尤其适合一两百条数据的场景。需要注意的是生成前尽量把数据清理干净比如编号列不要带单位、不要带格式尾巴二维码内容里如果有换行符也会导致扫码识别不稳定。如果你需要把编号和名称拼在一起作为二维码内容也完全可以在表格里加一列辅助列用A2B2的方式先把内容拼好再选择这一列去生成灵活性其实不小。生成的二维码可以整体选中右键另存为图片也能直接打印用于制作资产标签、会议签到牌完全够用。3.2 Excel 365的IMAGE函数让公式生成动态二维码如果你用的是Excel 365那么最偷懒的方式就是IMAGE函数。我在B2单元格里写IMAGE(https://api.qrserver.com/v1/create-qr-code/?size120x120dataENCODEURL(A2))然后下拉填充A2的编号就会立刻变成一张可识别的二维码。这里的原理很简单二维码本质是一张图片而服务端已经把内容转成了图片Excel的IMAGE函数负责把URL图片塞进单元格而已。实践中你需要注意三点一是参数里的data后面接的是你要编码的内容建议用ENCODEURL包一层避免遇到、#、空格等特殊字符把URL截断二是这个方案依赖网络如果办公网屏蔽了外部请求图片会显示成占位符而不是二维码三是二维码服务有缓存你改了A2的内容B2未必会马上更新按F9强制刷新一下通常就好了。还有这种方案生成的二维码在单元格里不能单独另存为本地图片打印或截图倒是没问题。如果你要的是“既能嵌入表格又能导出PNG”的最终成品请往后看VBA方案。3.3 VBA宏批量生成二维码适合大批量精细排版VBA方案适合数据量大、位置要求高、需要灵活控制的用户。思路是打开Excel后用一段宏循环遍历A列数据逐个拼接二维码图片下载地址下载到本地临时目录再插入到当前工作表对应位置。打开编辑器的方式AltF11插入模块粘贴以下代码Private Declare PtrSafe Function URLDownloadToFile Lib urlmon _ Alias URLDownloadToFileA _ (ByVal pCaller As LongPtr, _ ByVal szURL As String, _ ByVal szFileName As String, _ ByVal dwReserved As LongPtr, _ ByVal lpfnCB As LongPtr) As Long Sub BatchGenerateQR() Dim i As Long, lastRow As Long Dim picPath As String, cellValue As String Dim pic As Picture lastRow Cells(Rows.Count, A).End(xlUp).Row Application.ScreenUpdating False For i 2 To lastRow cellValue Cells(i, A).Value If cellValue Then picPath ThisWorkbook.Path \temp_qr_ i .png 拼接在线二维码接口注意如果数据含中文需要URL编码 URLDownloadToFile 0, _ https://api.qrserver.com/v1/create-qr-code/?size300x300data WorksheetFunction.EncodeURL(cellValue), _ picPath, 0, 0 Set pic ActiveSheet.Pictures.Insert(picPath) With pic .Left Cells(i, B).Left .Top Cells(i, B).Top .Width 80 .Height 80 End With Kill picPath End If Next i Application.ScreenUpdating True MsgBox 批量生成完成共处理 lastRow - 1 条数据 End Sub运行前把数据放在A列标题在第1行从第2行开始就是正式内容。宏会逐个读取A列单元格下载二维码到临时文件再插入到B列当前位置。实际操作中有几个坑第一64位Office声明里必须写PtrSafe32位的不写也行写上也兼容第二下载接口需要网络短时间内连续下载几百个二维码消耗流量且速度取决于网速第三插入的图片默认锚定在单元格左上角行高不够就会互相重叠建议先把行高统一设到85磅左右第四二维码内容如果包含中文或特殊符号必须做URL编码我在代码里用了EncodeURL这一步不能省。如果你公司有内网的二维码生成服务也可以把URL替换成内网地址速度和稳定性都会更好。4. 表格里批量生成条形码的实操三种实现4.1 纯Excel条形码字体法免费、快速、门槛最低条形码和二维码不一样它不需要联网、不需要额外程序只要你电脑里安了一个条形码字体就能做。市面上有很多免费条形码字体常见的有Code 39和Code 128两类。以Code 39为例先找一个下载源比较干净的Code 39字体安装到系统里然后在C2单元格输入*A2*把C2的字体设置成“Free 3 of 9”或你安装的那个Code 39字体名字号调到20左右一个可扫描的条形码就出现了。下拉填充整列就全是条形码。原理也好懂Code 39字体会把星号识别为起始符和结束符把字母数字映射成一簇黑条白条打印出来扫码枪就能读懂。这个方法非常适合料号、货号、序列号这类纯数字字母的场景。但要注意三点一是内容里如果有星号、加号等特殊字符会出现错误或无法扫描二是中文内容不支持想存中文就用二维码方案三是条码宽度会随内容长度变化内容太长时需要缩小字号或换Code 128否则打印出来条太密扫不出。实际做库存标签时我一般会在条形码下方再放一行小字显示同一个编号这样即使扫码失败也能肉眼核对不至于整批标签作废。4.2 使用Excel ActiveX条形码控件微软自带控件的正确打开方式如果你不想装字体Excel自己还带了一个条形码控件。路径是“开发工具-插入-其他控件”在列表里找“Microsoft BarCode Control 15.0”。点击后在表格里拖出一个条形码形状右键条形码选择“属性”在“自定义”窗口里把样式设为7Code 128同时在LinkedCell里填上A2这样A2的内容就会自动显示成条形码。优点是不需要额外安装字体生成的条码样式也更标准。缺点是批量操作极其痛苦一个控件只能绑定一个单元格数据量大时复制粘贴控件、逐个设置LinkedCell效率不高。我的建议是只有条码数量在50个以内、且要求使用系统控件时才用它数量一大老老实实回到字体法或Python。还有一个常见的坑64位版本的Office在某些系统环境下没有这个控件找不到的话不用纠结说明你的版本不提供该组件直接换其他方案就行。4.3 Python脚本批量生成条形码上万条数据也不怕最后说Python方案这是我觉得真正适合“批量”的方法。先在命令行里装库pip install python-barcode pillow pandas openpyxl然后准备一个product_list.xlsxA列内容是编号运行下面脚本import pandas as pd import barcode from barcode.writer import ImageWriter from pathlib import Path df pd.read_excel(product_list.xlsx) out_dir Path(barcodes) out_dir.mkdir(exist_okTrue) code128 barcode.get_barcode_class(code128) for idx, row in df.iterrows(): text str(row[编号]) barcode_obj code128(text, writerImageWriter()) barcode_obj.save(out_dir / fbarcode_{idx})脚本会在当前目录生成一个barcodes文件夹里面是每个编号对应的条形码PNG图片。如果你想把这些图片再塞回Excel模板可以配合openpyxl的add_image方法把图片按指定单元格坐标插入这样就能实现“既出图又回填表格”的全自动流程。Python方案的优势在于扩展性生成二维码同样可以换成qrcode库逻辑几乎一样数据量再大也不担心卡死。对于经常要处理上万条主数据的朋友花半小时把这个脚本跑通后面每个月都能省下大半天。5. 常见问题与排查技巧实录5.1 生成出来一扫就“没反应”从这几个地方查起如果你生成的二维码或条形码手机扫码枪扫了没有任何反应先不要怀疑是工具问题90%是内容和精度的事。第一检查内容是否带有多余字符。表格里最常见的坑是自动换行、隐藏空格、科学计数法比如长数字被Excel转成E。在Excel里用LEN()看一下字符长度如果和预期对不上就套一层CLEAN(A2)去掉不可见字符。第二检查图片有没有被压扁拉长。二维码一旦宽高比例失调扫描必失败。条形码如果被拉伸或压缩也会导致黑白条宽度比例错乱。第三打印质量这个大坑激光打印机的效果最好喷墨打印容易糊打印后立刻试扫如果失败就调整对比度或放大码。第四二维码内容过长也会导致点阵密集手机稍微一晃就扫不出来内容尽量精简网址用短链接。第五条形码内容中如果混入了全角字符或者二维码里塞了超过500个字符的长文本也会显著降低识别率遇到这种情况我建议直接把内容拆成两个二维码或者改用短码方案。5.2 批量生成时卡顿、内存耗尽、图片错位怎么解决批量生成最怕的不是生成而是生成到一半卡死。我自己第一次用VBA跑一千条数据时表格直接无响应了十分钟。后来总结出几条经验循环开始和结束时加上Application.ScreenUpdating False和True关闭屏幕刷新能给宏提速几倍一次生成一千条以上的图片时建议分成两三百条一批跑完保存一下再继续插入图片后一定要统一设置图片大小默认插入的图片可能因为接口返回尺寸不一样而出现大小不一如果发现图片位置错乱检查是不是行高设置不一致或单元格有合并图片锚定在合并单元格上很容易漂移。还有一个容易忽略的点宏或脚本生成的临时图片文件会占磁盘空间跑完后记得清理临时目录长期积攒也会拖慢系统。如果是WPS内置批量生成遇到卡顿通常是数据区域选得太大或者勾选了实时预览把它关掉能明显好转。另外有些朋友遇到“Excel表格无法复制粘贴”的怪问题大概率是因为同时打开了多个程序导致剪贴板被占用批量生成图片的过程中尤其容易触发建议跑批之前先把不相关的程序关掉。5.3 打印和导出时图片变模糊或丢失怎么办很多朋友生成时好好的打印出来却模糊不清或者图片直接消失。这多半是图片与单元格锚定的问题。在Excel里右键二维码图片选择“设置图片格式”打开“大小与属性”把属性里的“随单元格改变位置和大小”勾选上这样拖动行高列宽后图片能跟着走打印也比较稳定。另外导出PDF时如果二维码丢失优先检查页面设置里的打印区域是否包含了图片所在列也可以尝试在打印首选项里把质量调到“高”再输出。WPS生成的二维码图片默认是嵌入单元格的不属于浮层图片相对问题少一些但同样要注意“打印行数列标题”和“网格线”的设置别让网格线把条码打印得花里胡哨。最后一个小技巧打印前先做一次打印预览把缩放比例锁定在100%不要选“将所有列调整为一页”那样会把二维码压缩变形。如果条码标签纸是标准规格最好在页面设置里自定义纸张尺寸让每个条码的实际物理尺寸稳定在20mm以上扫码成功率会高很多。最后再分享一个我自己的组合习惯日常几十条数据用WPS内置功能几分钟搞定需要长期更新的字段表用Excel IMAGE函数挂在旁边一旦到了上千条还要做标签打印的直接上Python脚本绝不恋战。批量生成二维码和条形码这件事方法本身不难难的是在开工前就把方案和数据规范想清楚。你把表格里的数据整理干净了后面的生成、打印、识别每一步都会顺很多。