Excel中批量生成标签,批量打印标签。按指定模板批量打印标签

17 篇文章 1 订阅
16 篇文章 0 订阅

1.问题概述

工作中经常需要将产品明细表转换成标签,贴在送货单上,或者将学生成绩转换成标签打印出来发送给学生。
例如在下图中有若干产品的送货信息,要求按图2的模板批量打印。 在这里插入图片描述 图1 送货信息 在这里插入图片描述图2 标签模板
要实现此类需求,手工操作显然是不行的,事倍功半且出错概率很高,可能复制数据时漏掉某一行。利用插件工具来完成的话,就算有数千行也可以几秒钟完成。接下来我向您介绍一个工具,标签打印的利器——E灵。

2.软件下载

E灵下载地址为:http://excelbbx.net/download.htm
下载后双击Setup.exe安装即可,安装后打开Excel即可看到图3所示的功能区选项卡“E灵”,表示安装成功。插件支持Excel 2007、2010、2013、2016、2019,同时还支持WPS。
在这里插入图片描述图3 E灵操作界面

3.使用教学

要将数据表转换成标签,请按以下步骤操作:
1)进入“送货单明细”表中,单击菜单“报表批处理”->“批量生成标签”,程序会弹出图4所示的窗口。 在这里插入图片描述图4 批量打印标签界面
上图所示的窗口中可以分别指定标签的数据来源、标签的行数以及是否需要在标签中插入二维码、条形码,如果需要则继续执行二维码和条形码的参数。
2)单击“请指定标题来源”右方的浏览按钮 ,然后选中A1:G1区域,再单击“确定”按钮,操作界面如图5所示。 在这里插入图片描述图5 指定数据源的标题
3)此时程序会弹出图6所示的对话框,要求用户指定标题区域A1:G1的第一个单元格“客户”对应于标签模板的哪一个单元格,此时选择标签模板的B1即可,表示打印标签时将送货单明细表的A列客户引用到标签模板是B1单元格来。
在这里插入图片描述图6 指定明细表与标签模板的对应关系
4)当单击“确定”按钮以后,程序会继续弹出对话框,要求指定其它标题在“标签模板”中的对应位置,您只需一一指定即可,如果某个标题不需要打印,那么单击“取消”即可。
5)当指定完所有标题后,将标签的行数设置为7行(默认值是8行)。设置完成后,窗口的各项参数如下:
在这里插入图片描述图7 已经设置好参数的标签窗口
6)由于当前标签不需要二维码,因此直接单击“生成标签”即可,生成后的结果如下:
在这里插入图片描述图8 最终的标签效果
在这里插入图片描述图9 标签的打印预览效果
如果送货单明细有了修改,或者需要重新打印,此时不需要重新设置所有参数,打列“批量打印标签”对话框后可以看到“调用历史记录”按钮由灰色禁用状态变成了可用状态,此时单击“调用历史记录”即可生成所有参数,然后单击“生成标签”即可。
在这里插入图片描述图10 调用历史记录从而避免每次手工指定参数
如果需要在标签中显示二维码,二维码的内容是产品的名称、颜色和数量,标签的样式如图11所示,那么要如何操作呢? 在这里插入图片描述

图11 带二维码的标签
7)进入“送货单明细”工作表,按前面的相同步骤设置标题来源和标题的行数,然后将“在标签中插入一维二维码码”复选框打勾,此时可以看到二维码和一维码相关的参数设置界面,如下图所示:
在这里插入图片描述图12 设置一维码和二维码的界面
8)单击“存放位置”右方的浏览按钮,然后再选择“标签模板”工作表中的C2单元格,表示生成的二维码放在C2单元格,设置界面如下:
在这里插入图片描述图13 指定二维码的存放位置
9)单击“数据来源”右方的浏览按钮,然后选择C1:E1区域,单击“确定”按钮,设置界面如下: 在这里插入图片描述图14 指定二维码的数据来源
10)分隔符号保持为默认值“,”不做修改。接着将“包含标题”打勾。
11)单击按钮“生成标签”,结果如下:
在这里插入图片描述图15 最后的标签效果
此时可以打印标签了,送货单明细表的数据有多少行,就会打印出多少个标签来。标签中的二维码包含了每一箱产品的名称、颜色和数量,例如第一个二维码扫码后结果如下:
型体名称:SHS19004大底,颜色: 黑色19-0000TPX,数量:1355
当然了,也可以在设置参数时将二维码切换条形码,本软件功能强大、操作便捷、设置灵活,可以生成图16所示的含条形码的标签:在这里插入图片描述图16 包条形码的产品标签
是不是很强大呢?各位看官老爷们可以体验一下,亲自打印标签,感受一下Excel工具的高效与灵活。

最后,通过一个动画展示所有操作过程:
在这里插入图片描述

1. 首先需要导入Apache POI库,用于读取和写入Excel文件。 2. 创建一个Excel模板,在其设置好标签的格式和位置。 3. 使用POI库读取模板文件,并获取需要填充数据的单元格。 4. 使用Java代码获取需要填充的数据,并将数据填充到相应的单元格。 5. 将填充完数据的Excel文件保存到指定路径。 6. 可以使用Java打印API打印标签。 以下是一个示例代码: ``` import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFPrintSetup; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class LabelGenerator { private static final String TEMPLATE_PATH = "template.xlsx"; private static final String OUTPUT_PATH = "labels.xlsx"; private static final int ROW_START = 2; private static final int ROW_END = 11; private static final int COL_START = 1; private static final int COL_END = 3; public static void main(String[] args) throws IOException { // 读取模板文件 FileInputStream templateFile = new FileInputStream(TEMPLATE_PATH); Workbook workbook = WorkbookFactory.create(templateFile); Sheet sheet = workbook.getSheetAt(0); // 获取需要填充数据的单元格 List<Cell> cells = new ArrayList<>(); for (int row = ROW_START; row <= ROW_END; row++) { for (int col = COL_START; col <= COL_END; col++) { Row r = sheet.getRow(row); Cell c = r.getCell(col); cells.add(c); } } // 获取需要填充的数据 List<Map<String, String>> data = getData(); // 根据数据填充单元格 int index = 0; for (Map<String, String> row : data) { for (Cell cell : cells) { String cellValue = cell.getStringCellValue(); for (String key : row.keySet()) { String value = row.get(key); cellValue = cellValue.replace(key, value); } cell.setCellValue(cellValue); } // 合并单元格 CellRangeAddress region = new CellRangeAddress( ROW_START, ROW_END, COL_START, COL_END ); sheet.addMergedRegion(region); // 每11行生成一个新的标签页 if (index % 11 == 10) { sheet = workbook.createSheet(); cells = new ArrayList<>(); for (int row = ROW_START; row <= ROW_END; row++) { Row r = sheet.createRow(row); for (int col = COL_START; col <= COL_END; col++) { Cell c = r.createCell(col); cells.add(c); } } } else { // 新生成的每个标签页都需要重复设置打印区域和打印方向 XSSFSheet xssfSheet = (XSSFSheet) sheet; xssfSheet.setAutobreaks(true); xssfSheet.setFitToPage(true); xssfSheet.setHorizontallyCenter(true); xssfSheet.setVerticallyCenter(true); XSSFPrintSetup printSetup = xssfSheet.getPrintSetup(); printSetup.setPaperSize(XSSFPrintSetup.A4_PAPERSIZE); printSetup.setLandscape(false); printSetup.setScale((short) 100); sheet.setPrintGridlines(true); sheet.setDisplayGridlines(false); sheet.setMargin(Sheet.LeftMargin, 0.2); sheet.setMargin(Sheet.RightMargin, 0.2); sheet.setMargin(Sheet.TopMargin, 0.2); sheet.setMargin(Sheet.BottomMargin, 0.2); } index++; } // 保存生成Excel文件 FileOutputStream outputFile = new FileOutputStream(OUTPUT_PATH); workbook.write(outputFile); workbook.close(); outputFile.close(); } private static List<Map<String, String>> getData() { List<Map<String, String>> data = new ArrayList<>(); Map<String, String> row1 = new HashMap<>(); row1.put("{name}", "张三"); row1.put("{age}", "20"); row1.put("{gender}", "男"); data.add(row1); Map<String, String> row2 = new HashMap<>(); row2.put("{name}", "李四"); row2.put("{age}", "21"); row2.put("{gender}", "女"); data.add(row2); return data; } } ``` 在上面的示例代码,我们首先读取了一个Excel模板文件,然后通过指定行和列范围获取需要填充数据的单元格。接下来,我们使用一个`getData()`方法获取需要填充的数据,并将数据填充到相应的单元格。代码还包含了打印标签页的设置,以及将填充完数据的Excel文件保存到指定路径的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值