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

根据Excel数据表快速创建Word表格(标签)

实例需求:Excel中产品表如下图所示。

在这里插入图片描述

现需要根据Excel产品表创建如下所示的Word表格(标签),虚线框中格式说明(字体大小),代码输出Word文档,无需此部分。

在这里插入图片描述

Sub Excel2Word()Dim ws As Worksheet, wdDoc As Object, wdApp As ObjectDim i As Long, j As LongOn Error Resume NextSet wdApp = GetObject(, "Word.Application")On Error GoTo 0If wdApp Is Nothing ThenOn Error Resume NextSet wdApp = CreateObject("Word.Application")On Error GoTo 0End IfIf wdApp Is Nothing ThenMsgBox "Microsoft Word is not installed or accessible.", vbExclamationExit SubEnd IfwdApp.Visible = TrueSet ws = ThisWorkbook.Worksheets("Sheet1")Dim oTab As ListObjectIf ws.ListObjects.Count = 0 ThenSet oTab = ws.ListObjects.Add(xlSrcRange, ws.Range("A1").CurrentRegion, , xlYes)ElseSet oTab = ws.ListObjects(1)End IfDim RowCnt As Long:  RowCnt = oTab.ListRows.Count * 3 + 1Set wdDoc = wdApp.Documents.AddDim wdTab As ObjectSet wdTab = wdDoc.Tables.Add(Range:=wdDoc.Range, NumRows:=RowCnt, _NumColumns:=1, DefaultTableBehavior:=1, AutoFitBehavior:=0)With wdTab.Range.ParagraphFormat.Alignment = 1.Font.Bold = True.Font.Size = 11End WithFor i = 3 To RowCnt Step 3wdTab.cell(i, 1).Split 1, 3wdTab.Rows(i).Borders(-6).LineStyle = 0NextwdTab.cell(RowCnt, 1).Split 1, 3wdTab.Rows(RowCnt).Borders(-6).LineStyle = 0Dim arr: arr = oTab.DataBodyRange.ValueFor i = 1 To oTab.ListRows.CountWith wdTab.cell(i * 3 - 2, 1).Range.Text = arr(i, 1).Font.Size = 16End WithWith wdTab.cell(i * 3 - 1, 1).Range.Text = arr(i, 2).Font.Size = 12End WithFor j = 1 To 3wdTab.cell(i * 3, j).Range.Text = arr(i, j + 2)NextNextwdTab.cell(RowCnt, 1) = arr(1, 6)wdTab.cell(RowCnt, 2) = arr(1, 7)wdTab.cell(RowCnt, 3) = Format(Date, "mmmm dd, yyyy")wdDoc.SaveAs ThisWorkbook.Path & "\WordTable.docx"MsgBox "Task completed.", vbInformation
End Sub

【代码解析】
第4行代码开启错误忽略模式。
第5行代码尝试获取已打开的 Word 应用实例。
第6行代码恢复正常错误处理。
第7行代码判断 wdApp 是否为空,如果为空则进入条件分支。
第8行代码再次开启错误忽略模式。
第9行代码尝试新建 Word 应用对象。
第10行代码恢复正常错误处理。
第12行代码再次判断 wdApp 是否为空。
第13行代码如果为空则弹出提示框,提示 Word 未安装或不可用。
第14行代码退出过程。
第15行代码结束第二次条件分支。
第16行代码设置 Word 应用可见,实际使用过程中,为了提升代码执行效率,可以隐藏 Word 应用。
第17行代码获取当前工作簿中名为 “Sheet1” 的工作表。
第19行代码判断工作表是否存在表格对象(ListObject,下同)。
如果没有表格对象,则第20行代码将数据区域转换为表格对象。
否则,第22行代码直接获取第一个表格对象。
第24行代码计算 Word 表格需要的总行数 RowCnt,每个数据行对应Word表格中的三行,额外加一行。
第25行代码在 Word 应用中新建一个文档。
第27-28行代码在 Word 文档中插入表格,行数为 RowCnt,列数为 1。
第29-33行代码通过 With 语句设置表格整体格式:段落居中、字体加粗、字号 11。
第34行代码启动循环,从第 3 行开始,每隔 3 行执行一次。
第35行代码将该行的单元格拆分为 3 列。
第36行代码移除该行的内部垂直边框线。
第38-39行代码对最后一行执行同样的拆分,并移除边框。
第40行代码将 Excel 表格主体数据读入数组 arr。
第41行代码启动循环,遍历 Excel 表格的每一行。
第42-45行代码将 Excel 第一列内容写入 Word 表格,设置字号 16。
第46-49行代码将 Excel 第二列内容写入 Word 表格,设置字号 12。
第50-52行代码将 Excel 第 3 至第 5 列数据写入 Word 表格的三列。
第53行代码结束循环。
第54行代码在 Word 表格最后一行第 1 列填入 Excel 第 6 列内容。
第55行代码在 Word 表格最后一行第 2 列填入 Excel 第 7 列内容。
第56行代码在 Word 表格最后一行第 3 列填入当前日期。
第57行代码将 Word 文档保存到当前工作簿路径,文件名为 WordTable.docx。
第55行代码弹出提示框,提示任务完成。

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

相关文章:

  • JavaScript中的XMLHttpRequest对象分析
  • Docker 存储原理精要
  • s[:] = reversed(s) 和 s = reversed(s)的区别
  • Blender建模:对于模型布线的一些思考
  • FPGA设计杂谈之七:异步复位为何是Recovery/Removal分析?
  • 浅谈 SQL 窗口函数:ROW_NUMBER() 与聚合函数的妙用
  • 深入解析数据结构之单链表
  • 人工智能加速漏洞利用,15分钟即可完成概念验证?
  • 网络:相比于HTTP,HTTPS协议到底安全在哪?
  • go 开发环境配置 air + dlv debug 踩坑之旅
  • AI基础学习周报十一
  • 大模型——利用RAG构建智能问答平台实战
  • 图像描述编辑器 (Image Caption Editor)
  • 文字的力量:Qwen-Image如何让AI真正“读懂”中文之美
  • HTTPS -> HTTP 引起的 307 状态码与HSTS
  • ans.1中的对象标识符OBJECT_IDENTIFIER----OID
  • 【开题答辩全过程】以 基于springboot的垃圾分类管理系统为例,包含答辩的问题和答案
  • 力扣热题100:合并区间详解(Java实现)(56)
  • 历史数据分析——寒武纪
  • Android开发-活动页面
  • 20.28 《4bit量化模型预处理揭秘:如何节省75%显存高效微调LLM?》
  • leetcode-hot-100(堆)
  • 金融学-货币理论
  • Kafka应用过程中的高频问题
  • 【Linux基础】深入理解计算机存储:GPT分区表详解
  • 对于牛客网—语言学习篇—编程初学者入门训练—复合类型:BC136 KiKi判断上三角矩阵及BC139 矩阵交换题目的解析
  • uvm验证环境中struct(结构体)和class的区别与联系
  • 使用AdaLoRA 自适应权重矩阵微调大模型介绍篇
  • 接口测试总结-含接口测试和前端测试的区别与比较
  • PyTorch 张量(Tensor)详解:从基础到实战