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

根据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.xdnf.cn/news/19303.html

相关文章:

  • 后向投影合成孔径辐射源定位方法(一)
  • 基于计算机视觉的海底图像增强系统:技术详述与实现
  • VMWare Tools (Linux)安装教程
  • 性能优化三剑客:`memo`, `useCallback`, `useMemo` 详解
  • Java异常处理:掌握优雅捕获错误的艺术
  • 远程管理协议telnet、ssh
  • 智能制造——解读装备制造业智能工厂解决方案【附全文阅读】
  • 【IO学习】IO基础和标准IO函数
  • 拉长视频时长的两种方法
  • SCARA 机器人工具标定方法
  • VMware虚拟机网盘下载与安装指南(附安装包)
  • Ubuntu24.04(Jazzy)从零开始实现环境配置和Gmapping建图
  • Redis的Java客户端
  • MyBatis-动态sql
  • 【自记】 Python 中函数参数前加 *(单星号)的解包可迭代对象写法说明
  • 基于三维反投影矫正拼接视频
  • TJA1445学习笔记(二)
  • 咨询进阶——解读 目标管理实务:知识概述、管理概述和实施【附全文阅读】
  • 计算机视觉(四):二值化
  • MySQL面试集合
  • 【C++ 】STL详解(六)—手撸一个属于你的 list!
  • 力扣热题100:合并区间详解(Java实现)(56)
  • 在SAP系统中,如何查询已经被打上了删除标记的生产订单?
  • 数据结构(04)—— 栈和队列
  • [每周一更]-(第158期):构建高性能数据库:MySQL 与 PostgreSQL 系统化问题管理与优化指南
  • 【lua】元表、元方法 详解及应用
  • 【LeetCode_27】移除元素
  • Ubuntu中通过SSH克隆Windows的远程Git仓库(局域网中挺有用)
  • 对于牛客网—语言学习篇—编程初学者入门训练—复合类型:二维数组较简单题目的解析
  • Unity核心概念①