使用Word表格数据快速创建图表
实例需求:Word的表格如下所示,标题行有合并单元格。

现在需要根据上述表格数据,在Word中创建如下柱图。如果数据在Excel之中,那么创建这个图并不复杂,但是Word中就没用那么简单了,虽然Word中可以插入图表,但是其数据源仍然是来自于Excel。

示例代码如下。
Sub CreateWordChart3()Dim oChart As Chart, oTable As TableDim oSheet As Object ' Excel.WorksheetConst START_CELL = "AA1"Application.ScreenUpdating = FalseSet oTable = ActiveDocument.Tables(1) ' modify as neededSet oChart = ActiveDocument.Shapes.AddChart.ChartSet oSheet = oChart.ChartData.Workbook.Worksheets(1)oTable.Range.CopyoSheet.Range(START_CELL).SelectoSheet.PasteCall Create2DTable(oSheet, oSheet.Range(START_CELL))oChart.ChartData.Workbook.CloseApplication.ScreenUpdating = True
End Sub
【代码解析】
第4行代码指定辅助数据区域的起始单元格(下文中简称为锚点单元格)。
第5行代码禁止屏幕更新。
第6行代码获取活动文档中的第一个表格对象。
第7行代码在文档中添加一个Chart对象。
第8行代码获取Chart对象的Worksheet对象(即图表数据源所在工作表)。
第9行代码拷贝表格区域。
第10行代码选中锚点单元格。
第11行代码粘贴数据,实现将Word表格数据导入到Excel工作表中。
第12行代码调用Create2DTable过程转换数据。
第13行代码关闭Chart对象的源数据工作簿。
第14行代码恢复屏幕更新。
Sub Create2DTable(ByRef tmpSheet As Object, startCell As Object)Dim oDicCat As Object, oDicSt As Object, sKey, vKeyDim rCell As Object Dim rC As Object Dim i As Long, j As LongSet oDicCat = CreateObject("scripting.dictionary")Set oDicSt = CreateObject("scripting.dictionary")With startCell.CurrentRegionFor Each rCell In .Rows(2).CellsIf Len(rCell) > 0 ThenoDicCat(rCell.Value) = ""End IfNextFor Each rCell In .Rows(1).CellssKey = rCellIf Len(sKey) > 0 ThenIf Not oDicSt.Exists(sKey) ThenSet oDicSt(sKey) = CreateObject("scripting.dictionary")For Each vKey In oDicCatoDicSt(sKey)(vKey) = ""NextEnd IfFor Each rC In rCell.Offset(1).Resize(1, rCell.MergeArea.Count)oDicSt(sKey)(rC.Value) = rC.Offset(1).ValueNextEnd IfNextEnd WithDim xlTab As Object Set xlTab = tmpSheet.ListObjects("Table1")xlTab.DataBodyRange.DeleteDim RowCnt As Long, ColCnt As LongRowCnt = oDicSt.CountColCnt = oDicCat.CountxlTab.Resize tmpSheet.Range("A1").Resize(RowCnt + 1, ColCnt + 1)With xlTab.Range.Cells(1, 1) = "REQ"For i = 1 To ColCnt.Cells(1, i + 1) = oDicCat.keys()(i - 1)NextFor j = 1 To RowCntsKey = oDicSt.keys()(j - 1).Cells(j + 1, 1) = sKeyFor i = 1 To ColCnt.Cells(j + 1, i + 1) = oDicSt(sKey)(.Cells(1, i + 1).Text)NextNextEnd WithstartCell.CurrentRegion.Clear
End Sub
【代码解析】
第6~7行代码创建两个字典对象。
第8行代码获取辅助表格的单元格区域。
第9~13行代码循环遍历表格中第二行单元格,将排重的“类别”列表保存在字典对象oDicCat中。
第10行代码判断类别不为空,并且不等于行标题。
第14~27行代码循环遍历第一行单元格。
第15行代码获取单元格内容。
第16行代码判断单元格是否为空,即“评估状态”。
第17行代码判断“评估状态”是否存在于字典对象oDicRes中。
第18行代码以sKey为键,创建嵌套字典对象。
第19~20行代码为新建的字典对象增加“类别”,这样可以将数据表转换为规范的2D表格,即每个“评估状态”都包含3个类别,这样数据便于创建图表。
第23~25行代码读取第3行单元格数据,保存到对应的嵌套字典对象之中。
第30行代码获取工作表中的表格对象(ListObject)。
第31行代码清空表格数据区域。
第33~34行代码获取获取类别和“评估状态”的个数,这决定了数据表格的维度(行数和列数)。
第35行代码重设表格区域。
第37行代码写入数据。
第38~40行代码循环读取oDicCat中内容,写入表格标题行(类别)。
第41~47行代码写入表格数据。
第42~43行代码写入第一列“评估状态”。
第44~46行代码写入评估统计数据。
第49行代码清空辅助单元格区域。
运行示例代码,最终效果如下图所示。

相关文章:
使用Word表格数据快速创建图表
实例需求:Word的表格如下所示,标题行有合并单元格。 现在需要根据上述表格数据,在Word中创建如下柱图。如果数据在Excel之中,那么创建这个图并不复杂,但是Word中就没用那么简单了,虽然Word中可以插入图表&a…...
JAVA面试题大全(十三)
1、Mybatis 中 #{}和 ${}的区别是什么? 在 MyBatis 中,#{} 和 ${} 是两种用于参数绑定的方式,它们之间的主要区别在于数据处理的方式和 SQL 注入的风险。 #{}:预编译处理 #{} 用于预编译处理,MyBatis 会为其生成 Prep…...
搜维尔科技:第九届元宇宙数字人设计大赛入围作品名单
随着第九届元宇宙数字人设计大赛渐近尾声,各院校提交的数字人作品已陆续完成评分统计汇总工作!现将入围名单公布,请入围团队尽可能到场参加大赛颁奖典礼,具体获奖名次将在颁奖典礼中现场公布! 颁奖典礼时间、地点&…...
SMB工具横向移动
一. SMB工具介绍和使用 1.介绍 2013年的Defcon上,就引入了smbexec,后续 smbexec 被 Impacket 进一步完善了。在Impacket中支持明文认证,NTLM认证,Aeskey认证等方式! 2. 使用方法 命令: smbexec.exe 用户…...
cesuim
new Cesium.Color(255,255,0,1), //颜色 Math.PI/2color: Cesium.Color.fromCssColorString("#f40"), //16进制颜色初始化地球 import * as Cesium from "cesium";import { onMounted } from "vue"; onMounted(() > {Cesium.Ion.defaultAcc…...
2023、2024国赛web复现wp
2023 Unzip 类型:任意文件上传漏洞 主要知识点:软链接 随便上传一个一句话木马文件,得到一串php代码 根据代码上传zip文件发现进入后还是此页面 代码审计: <?php error_reporting(0); highlight_file(__FILE__);$finfo fin…...
day34 贪心算法 455.分发饼干 376. 摆动序列
贪心算法理论基础 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 贪心一般解题步骤(贪心无套路): 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 455.分发饼干 …...
养老院管理系统基于springboot的养老院管理系统java项目
文章目录 养老院管理系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目源码(9.9¥带走) 养老院管理系统 一、项目演示 养老院管理系统 二、项目介绍 基于springboot的养老院管理系统 角色:超级…...
跳台阶扩展问题
题目链接 f(1) 1f(2) 1 1 2f(3) 1 2 1 4f(4) 1 2 4 1 8 所以 f(n) 2 n − 1 ^{n-1} n−1 import java.util.Scanner;public class Solution {public int jumpFloorII(int target) {return 1 << (target - 1);} }...
超清高帧,成像升级 | SWIR短波红外相机500万像素992芯片
博图光电5MP短波红外相机,搭载了索尼IMX992 SenSWIR传感器,支持5.2MP分辨率,适合探测波长在400nm-1700nm波段的可见光和短波红外光,有效面积和透光率得到提升,内置TEC制冷片,实现了像素尺寸和图像均匀性方面…...
攻击渗透思考题
1. windows登录的明文密码,存储过程是怎么样的,密文存在哪个文件下,该文件是否可以打开,并且查看到密文 在Windows操作系统中,登录时输入的明文密码不会以明文形式存储在系统中。相反,Windows使用一种称为“…...
Flutter 中的 Opacity 小部件:全面指南
Flutter 中的 Opacity 小部件:全面指南 在Flutter中,动画和视觉效果是提升用户体验的重要手段。Opacity小部件允许你改变子组件的透明度,从而实现淡入、淡出或其它透明度相关的动画效果。本文将提供Opacity的全面指南,帮助你了解…...
【介绍下如何在SQL中添加数据】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
【Linux学习】深入了解Linux中进程状态及其转换
文章目录 进程状态进程排队进程的状态(运行,阻塞,挂起)进程的七个状态 孤儿进程 进程状态 进程 task_struct 可执行程序 进程不是一 直在运行的,可能在等待软硬件资源,比如scanf后,程序停止运…...
【Python设计模式11】建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,它将一个复杂对象的构建过程分离出来,使得同样的构建过程可以创建不同的表示。建造者模式通过使用多个简单的对象一步一步构建成一个复杂的对象。 建造者模式的结构 建造者模式…...
coredump文件生成配置
1.打开coredump文件生成开关 查看开关是否打开:ulimit -a 如果core file size 为0,则为关闭。 执行:ulimit -c 10240 将其coredump文件大小设置。 2.coredump文件保存位置: /proc/sys/kernel/core_pattern文件可以控制core文…...
jmeter线程组(下篇)
线程组 线程组作为JMeter测试计划的核心组件之一,对于模拟并发用户的行为至关重要。线程组元件是整个测试计划的入口,所有的取样器和控制器必须放置在线程组下。 可以将线程组视为一个虚拟用户池,其中每个线程可被理解为一个虚拟用户&#x…...
Stable Diffusion【写实模型】:逼真,逼真,超级逼真的国产超写实摄影大模型万享XL
今天和大家分享的是一个国产万享系列中使用量最高的大模型:万享XL_超写实摄影,顾名思义,该大模型主要是面向写实摄影,一方面生成的图片人物皮肤纹理细节超级逼真,另一方面对于光影效果的处理也非常到位。对于万享XL超写实摄影大模…...
Android 13 配置默认DN
需求: 如果存在用户配置的DNS服务器,则切面拦截运行商下发的DNS,替换为用户自己配置的DNS. 实现: 直接上代码: 1:TelephonyProperties 内新增属性保存用户设置的dns //QSSI.13/frameworks/base/telephony/java/com/android/in…...
系统开发与运行知识
系统开发与运行知识 导航 文章目录 系统开发与运行知识导航一、软件工程二、软件生命周期三、开发模型四、开发方法五、需求分析结构化分析 六、数据流图分层数据流图的画法设计注意事项 七、数据字典数据字典的内容 八、系统设计九、结构化设计常用工具十、面向对象十一、UML…...
保姆级教程:用PyTorch从零复现YOLOv4(附完整代码与Mosaic数据增强实现)
从零构建YOLOv4:代码级实现与核心模块解析 1. 环境配置与工具准备 在开始复现YOLOv4之前,我们需要搭建一个高效的开发环境。推荐使用Python 3.8和PyTorch 1.7的组合,这是目前最稳定的深度学习开发环境之一。 首先安装必要的依赖库:…...
YOLOv11厨房食材目标检测数据集-2499张-Meat-1_5
YOLOv11厨房食材目标检测数据集 📊 数据集基本信息 目标类别: [‘ayam’, ‘beef’, ‘pork’]中文类别:[‘鸡肉’, ‘牛肉’, ‘猪肉’]训练集:2256 张验证集:164 张测试集:79 张总计:2499 张 …...
单词拆分----dp
思路:刚开始看的时候没有思路,但我看给的样例,可以多次遍历wordDict看。。。好像不太对准备看看题解。首先需要知道这道题的dp的公式代表这什么,dp[i]表示 字符串s从起始位置到位置i,能否被被拆分成字典中的单词&#…...
谷歌外链怎么发?靠1种图文形式自动吸引外链
写外链一直是SEO里最耗体力的活。很多公司招了三个实习生,每天坐在电脑前发几百封开发信,回复率往往不到0.5%。到了2026年,谷歌的算法已经能识别出绝大多数带有“交换”性质的人为链接。现在的行情是,想要稳住排名,得让…...
基于AVR单片机的无线图像侦检系统:从硬件选型到软件实现
1. 项目概述与核心价值最近在整理过去的项目资料,翻到了一个挺有意思的老项目——基于Atmel AVR单片机的无线图像侦检系统。虽然现在STM32、ESP32满天飞,各种高性能MCU和无线模块层出不穷,但这个项目在当年(以及现在某些特定场景下…...
手把手教你用Vector CANape创建第一个AUTOSAR ECU测量工程(附A2L文件配置避坑点)
从零构建AUTOSAR ECU测量工程:Vector CANape实战指南与A2L文件深度解析 在汽车电子开发领域,ECU数据测量与标定是功能验证和性能优化不可或缺的环节。作为Vector工具链中的核心组件,CANape凭借其强大的实时数据采集和分析能力,已成…...
从ADC采样到FFT分析:手把手教你用STM32F407的DSP库搞定频谱计算
从ADC采样到FFT分析:手把手教你用STM32F407的DSP库搞定频谱计算 在工业振动监测、音频信号处理和电源质量分析等场景中,频谱分析是理解信号特征的关键技术。STM32F407凭借其Cortex-M4内核和硬件FPU,配合CMSIS-DSP库,能够高效实现实…...
五分钟搞定Python调用ChatGPT,使用Taotoken实现OpenAI兼容接入
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 五分钟搞定Python调用ChatGPT,使用Taotoken实现OpenAI兼容接入 对于刚接触大模型API的Python开发者来说,最…...
如何免费使用R3nzSkin游戏皮肤修改器:完整技术指南与内存钩子实战
如何免费使用R3nzSkin游戏皮肤修改器:完整技术指南与内存钩子实战 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3n/R3nzSkin R3nzSkin是一款专为《英雄联盟》设计的开源游戏皮肤修改器&a…...
Pandas数据筛选8大核心技巧:从布尔索引到query高效查询
1. 项目概述:为什么我们需要掌握Pandas数据筛选?如果你用Python做数据分析,那么Pandas库绝对是你的核心武器库。而在这个武器库里,数据筛选——也就是从庞大的数据集中精准地挑出你需要的那些行和列——是每天都要重复无数遍的操作…...
