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

1、问题需求:

将各种明细表转换成标签,进而实现批量打印。

 数据源明细

 标签效果

2、插件实现

插件下载地址:https://wwa.lanzoui.com/b00zcpp3g  密码:1wit

我们来看一下如何实现:

首先手动在表格的左上角做一个标签模板

 

 打开批量标签功能:

 

 开始填入一些必要的参数设置:

 

选择数据源的标题行:

 

将数据源和标签的对应关系调整好:

 

设置生成标签的数量、间隔:

一键生成:

 

 

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文件保存到指定路径的代码。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值