快速创建Word箱单(1/2)

在日常办公中,经常需要将 Excel 中的表格数据导出到 Word 文档进行汇报或打印。本文介绍一种 VBA 方法,可以批量将 Excel 数据导出到 Word。

实例需求:Excel数据表包含三列:箱号、数量、型号。

根据数据创建Word文档

  • 设置文档字体(微软雅黑)、字号(40)及水平居中格式
  • 每页第一行为空行
  • 每组数据分页显示
  • 如果第3列有多个型号(逗号分隔),那么拆分为单个型号

Word文档如下图所示。

示例代码如下:

vb 复制代码
Sub ExportToWord_1()
    Const wdAlignParagraphCenter As Long = 1
    Const wdBreakPage As Long = 7
    Const wdFormatXMLDocument As Long = 16
    Const wdReplaceAll As Long = 2
    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet: Set ws = wb.Worksheets("Sheet1")
    Dim dataArr As Variant
    dataArr = ws.Range("A1").CurrentRegion.Value
    Dim wdApp As Object: Set wdApp = CreateObject("Word.Application")
    wdApp.Visible = False
    Dim wdDoc As Object: Set wdDoc = wdApp.Documents.Add()
    With wdDoc.Styles("Normal").Font
        .Name = "微软雅黑"
        .Size = 40
    End With
    With wdDoc.Styles("Normal").ParagraphFormat
        .Alignment = wdAlignParagraphCenter
        .SpaceAfter = 0
        .SpaceBefore = 0
    End With
    Dim boxNo As String, qty As String, models As String, fname As String
    Dim arrModels, j As Long, modelItem As String, i As Long, sTxt
    For i = 2 To UBound(dataArr, 1)
        boxNo = Trim(CStr(dataArr(i, 1)))
        qty = Trim(CStr(dataArr(i, 2)))
        models = Trim(CStr(dataArr(i, 3)))
        If boxNo <> "" Or qty <> "" Or models <> "" Then
            arrModels = Split(models, ",")
            For j = LBound(arrModels) To UBound(arrModels)
                modelItem = Trim(arrModels(j))
                wdDoc.Characters.Last.Text = _
                    vbCrLf & dataArr(1, 1) & vbCrLf & boxNo & vbCrLf & _
                   dataArr(1, 2) & vbCrLf & qty & vbCrLf & _
                   dataArr(1, 3) & vbCrLf & modelItem & vbCrLf
                If i < UBound(dataArr) Or j < UBound(arrModels) Then _
                wdDoc.Characters.Last.InsertBreak wdBreakPage
            Next j
        End If
    Next i
    fname = wb.Path & "\" & Format(Now, "yyyymmdd_hhnnss") & ".docx"
    wdDoc.SaveAs2 Filename:=fname, FileFormat:=wdFormatXMLDocument
    wdDoc.Close False
    wdApp.Quit
    MsgBox "已生成 Word 文件:" & vbCrLf & fname, vbInformation
End Sub

【代码解析】

第1~5行代码Word定义常量,由于代码使用了后期绑定方式创建Word对象,因此无法识别这些Word常量,需要转换为对应的数值。

第6行代码声明并设置 wb 为当前工作簿 ThisWorkbook

第7行代码声明并设置 ws 为当前工作簿中的工作表 "Sheet1"。

第9行代码将 "Sheet1" 工作表的数据表读入数组 dataArr,便于高效批量处理。

第10行代码创建一个 Word 应用程序对象 wdApp

第11行代码将 Word 应用程序设为不可见状态,以便后台执行操作。

第12行代码创建一个新的 Word 文档对象 wdDoc,并基于默认模板生成空白文档。

第13~16行代码修改 Word 文档的"Normal"样式字体属性,将字体设置为"微软雅黑"、字号为 40,用于输出大标题。

第17~21行代码设置"Normal"样式段落格式,文本居中显示,段前段后间距为零。

第24行代码开始循环,从数据第二行起(跳过表头)逐行读取导出数据。

第25~27行代码获取当数据行内容,并去除空格,保存在变量中。

第28行代码判断当前行是否为空,若三列均为空则跳过,否则进入导出逻辑。

第29行代码将型号字符串按英文逗号拆分为数组 arrModels,用于逐个输出。

第30行代码开始遍历当前行中的每个型号项。

第31行代码去除型号项两端空格并存入变量 modelItem。

第32~35行代码通过字符串拼接方式,将表头字段与当前数据写入 Word 文档,字段之间以换行符 vbCrLf 分隔。

第36行代码判断是否为最后一条记录,若不是则插入分页符,使每组数据独立显示在一页。

第37行代码执行分页符插入操作。

第41行代码生成导出文件名,命名格式为 "年月日_时分秒.docx",并保存在工作簿同一目录下。

第42行代码将 Word 文档保存到指定路径,格式为 XML Document(.docx)。

第43行代码关闭 Word 文档对象,不保存后续修改。

第44行代码退出 Word 应用程序,释放资源。

第45行代码弹出提示框,显示生成的 Word 文件路径及名称。

相关推荐
鹏大师运维1 个月前
麒麟系统中修改 WPS 默认新建文件格式的方法
linux·操作系统·wps·docx·麒麟·word文档·excel文档
nuclear20117 个月前
使用Python在Word中创建、读取和删除列表 - 详解
python·多级列表·word文档·编号列表·项目符号列表·自定义列表·获取列表编号和内容
黛琳ghz1 年前
办公软件的答案?ONLYOFFICE 桌面应用编辑器会是最好用的 Office 软件?ONLYOFFICE 桌面编辑器使用初体验
编辑器·onlyoffice·文档·在线协作·电子表格·演示文稿·word文档