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

工作中经常有批量生成标签的场景,有多条数据,需要分别写到标签里面。并且,标签需要进行批量打印。

自己写了个工具,来实现这个功能。可以将三天的工作量缩减到10分钟。

生成的效果如下:

 数据源如下:

 

插件名称:速码工具箱

操作两步即可完成!

 

适用于已有数据源的情况下,一键生成多个标签。使用场景:固定资产标签、设备管理铭牌、产品生产信息标签卡等等。

插件由VBA转化而来,参考代码如下:

Sub 资产卡片()
    Rem 定义几个必要的变量,最大行数,最大列数,指定表及区域
    Dim Rm_lng As Long, Cm_int As Integer, Sh As Worksheet, Kap_Rng As Range
    Rem 卡片跳跃数,循环变量,将隔行数,卡片数组
    Dim Rs_By As Byte, i As Long, ii As Byte, RowC As Long, Arr()
    Dim New_Sh As Worksheet
    Set Sh = Worksheets("资产明细")
    With Sh
        Set Kap_Rng = Application.Intersect(.Range("a1").CurrentRegion, .UsedRange)
        With Kap_Rng
            Rm_lng = .Rows.Count
            Cm_int = .Columns.Count
        End With
    End With
    Set New_Sh = Worksheets.Add
    With New_Sh
        .Columns(1).ColumnWidth = 5.5
        .Columns(2).ColumnWidth = 9
        .Columns(3).ColumnWidth = 5.5
        .Columns(4).ColumnWidth = 9
      
    End With
    Application.ScreenUpdating = False
    Rs_By = 1 '每页1个卡片页面,3改3
    ReDim Arr(1 To 5, 1 To 2)
    Arr(1, 1) = "惠州分公司固定资产标签"
    Arr(2, 1) = "资产编号"
    Arr(3, 1) = "规格型号"
    Arr(4, 1) = "管理单位"
    Arr(5, 1) = "使用地点"

    For i = 2 To Rm_lng Step Rs_By
        RowC = RowC + IIf(i = 2, 1, 6)
        For ii = 1 To Rs_By
            Arr(2, 2) = Kap_Rng(i + ii - 1, "A").Text
            Arr(3, 2) = Kap_Rng(i + ii - 1, "C")
            Arr(4, 2) = Kap_Rng(i + ii - 1, "E")
            Arr(5, 2) = "'" & Kap_Rng(i + ii - 1, "F").Text
            With New_Sh
                With .Cells(RowC, ii + IIf(ii = 1, 0, 2))
                    .RowHeight = 30
                    .Resize(5, 2) = Arr
                    .Resize(1, 2).Merge
                    .HorizontalAlignment = xlCenter
                    .VerticalAlignment = xlCenter
                    .CurrentRegion.Borders.LineStyle = 1
                    .Offset(1, 0).Resize(5, 1).RowHeight = 20
                    .Offset(1, 0).Resize(5, 1).HorizontalAlignment = xlCenter
                    .Offset(1, 0).Resize(5, 1).VerticalAlignment = xlCenter
                    .Offset(1, 1).Resize(5, 1).HorizontalAlignment = xlLeft
                    .Offset(5, 0).RowHeight = 13
                End With
            End With
            If i = Rm_lng And i - 1 Mod 2 <> 0 Then Exit For
        Next ii
    Next i
    Application.ScreenUpdating = True
End Sub

生成好的标签,配合标签打印机,即可一键打印,非常方便。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值