当前位置: 首页 > news >正文

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

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

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

在这里插入图片描述

根据数据创建Word文档

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

Word文档如下图所示。
在这里插入图片描述

示例代码如下:

Sub ExportToWord_2()Const wdAlignParagraphCenter As Long = 1Const wdBreakPage As Long = 7Const wdFormatXMLDocument As Long = 16Const wdReplaceAll As Long = 2Dim wb As Workbook: Set wb = ThisWorkbookDim ws As Worksheet: Set ws = wb.Worksheets("Sheet1")Dim dataArr As VariantdataArr = ws.Range("A1").CurrentRegion.ValueDim wdApp As Object: Set wdApp = CreateObject("Word.Application")wdApp.Visible = FalseDim wdDoc As Object: Set wdDoc = wdApp.Documents.Add()With wdDoc.Styles("Normal").Font.Name = "微软雅黑".Size = 40End WithWith wdDoc.Styles("Normal").ParagraphFormat.Alignment = wdAlignParagraphCenter.SpaceAfter = 0.SpaceBefore = 0End WithDim boxNo As String, qty As String, models As String, fname As StringDim arrModels, j As Long, modelItem As String, i As Long, sTxt As StringConst PAGE_BREAK = "$$$"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 Len(boxNo & qty & models) ThenarrModels = Split(models, ",")For j = LBound(arrModels) To UBound(arrModels)modelItem = Trim(arrModels(j))sTxt = Join(Array(sTxt & PAGE_BREAK, "", _dataArr(1, 1), boxNo, _dataArr(1, 2), qty, _dataArr(1, 3), modelItem), vbCrLf)Next jEnd IfNext isTxt = Mid(sTxt, Len(PAGE_BREAK) + 3)wdDoc.Characters.Last.Text = sTxtWith wdDoc.Content.Find.Text = PAGE_BREAK.Replacement.Text = "^m".Forward = True.Wrap = 1.Format = False.MatchWildcards = False.Execute Replace:=wdReplaceAllEnd Withfname = wb.Path & "\" & Format(Now, "yyyymmdd_hhnnss") & ".docx"wdDoc.SaveAs2 Filename:=fname, FileFormat:=wdFormatXMLDocumentwdDoc.Close FalsewdApp.QuitMsgBox "已生成 Word 文件:" & vbCrLf & fname, vbInformation
End Sub

【代码解析】
第1~21行代码与前一篇博客相同,不再赘述, 请参考《快速创建Word箱单(1/2)》。
第24行代码定义分页符占位符常量 PAGE_BREAK 为字符串 $$$
第25行代码开始循环,从数据第二行起(跳过表头)逐行处理 Excel 数据。
第26~28行代码获取当数据行内容,并去除空格,保存在变量中。
第29行代码判断当前行是否为空,若三列均为空则跳过,否则进入处理逻辑。
第30行代码将型号字符串按英文逗号拆分为数组 arrModels,用于逐个输出。
第31行代码开始循环遍历当前行的每个型号项。
第32行代码去除当前型号项两端空格,赋值给 modelItem。
第33~36行代码将表头字段及当前数据拼接为文本段落,并在每组前面加上分页符占位符。
此处使用了Join函数,其第二参数(即分割符)为换行符 vbCrLf,改用这个结构之后,代码更简洁清晰。
第40行代码去除字符串开头多余的分页符占位符和换行符,得到最终文本 sTxt。
第41行代码将处理后的完整文本写入 Word 文档末尾。
第42~50行代码使用 Word 查找替换功能,将占位符 $$$ 替换为实际分页符^m,实现每行数据分页显示。
第51行代码生成 Word 文件名 fname,命名格式为“年月日_时分秒.docx”,并保存在当前工作簿目录。
第52行代码将 Word 文档保存为 .docx 格式。
第53行代码关闭 Word 文档对象,但不保存后续修改。
第54行代码退出 Word 应用程序,释放资源。
第55行代码弹出提示框,显示生成文件的完整路径及文件名。

http://www.dtcms.com/a/544511.html

相关文章:

  • LangChain4j学习11:模型上下文协议 (MCP)
  • mysql线上主从集群设置
  • RK3568 11.0编译报错ld.lld: error: undefined symbol: rtkbt_cts_info
  • 南京大学LLM开发基础(四)MoE, LoRA, 数的精度 + MLP层实验
  • 机器学习-回归分析概述
  • 企业建设网站的主要作用网站seo搜索引擎优化怎么做
  • 微信小程序可以做电影网站吗安网多少钱
  • 计算机专业做网站的开题报告门户建设开源软件
  • js基础:08、构造函数(共享方法)、原型(prototype)、原型对象、(修改原型)toString方法、垃圾回收
  • 如何通过机器学习(如K-means、SVM、决策树)与深度学习(如CNN、LSTM)模型,进行全球气候变化驱动因素的数据分析与趋势预测
  • Docker篇6-项目app.py和flask_app.service配置和映射到docker中
  • 从零开始搭建 flask 博客(1)实验
  • 深入解析 Rust 解构模式:元组、结构体与枚举的精准拆解
  • 从零开始搭建 flask 博客实验(2)
  • 筑牢智算“地基”:华为以RAS理念重塑AIDC建设新模式
  • 跨网段耦合器助汽车零部件线实现PLC与MES跨网段互联
  • C#程序实现将Teradata的存储过程转换为Azure Synapse Dedicated SQL pool的存储过程
  • 小型购物网站模板设计网站页面教案
  • 免费购物网站淘宝建设网站首页
  • 成绩发布工具使用方法,附成绩分析教程
  • sward零基础学习:安装与配置
  • java求职学习day45
  • 【有源码】基于Hadoop与Spark的时尚精品店数据分析与可视化系统-基于多维度分析的零售时尚销售数据挖掘与可视化研究
  • Guava - Guava 基本工具 Preconditions、Optional
  • 北京的电商平台网站有哪些内容做网站要多少钱 知乎
  • 北京网站建设 shwl营销单页网站
  • RISC-V开源处理器实战:从Verilog RTL设计到FPGA原型验证
  • Flutter兼容性问题:Namespace not specified
  • MoreFixes
  • 工业厂区人数进出显示屏让排班更科学