使用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.CurrentRegion' get the unique CatX listFor Each rCell In .Rows(2).CellsIf Len(rCell) > 0 ThenoDicCat(rCell.Value) = ""End IfNext' loop through tableFor 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 If' store values with nested DictFor Each rC In rCell.Offset(1).Resize(1, rCell.MergeArea.Count)oDicSt(sKey)(rC.Value) = rC.Offset(1).ValueNextEnd IfNextEnd WithDim xlTab As Object ' Excel.ListObjectSet xlTab = tmpSheet.ListObjects("Table1")xlTab.DataBodyRange.Delete' get the size of output tableDim RowCnt As Long, ColCnt As LongRowCnt = oDicSt.Count: ColCnt = 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)Next' populate outputFor 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行代碼清空輔助單元格區域。


運行示例代碼,最終效果如下圖所示。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15046.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15046.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15046.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

014_C標準庫函數之<stdio.h>

【背景】 今天這個主要說的是<stdio.h>頭文件&#xff0c;大家眾所周知&#xff0c;這個是我們學習C語言時第一個接觸到的頭文件了&#xff0c;那么為什么我不一開始就介紹這個頭文件呢&#xff1f;我覺得有兩個原因&#xff0c;如下&#xff1a; 1.一開始大家的編程思…

LeetCode/NowCoder-鏈表經典算法OJ練習3

孜孜不倦&#xff1a;孜孜&#xff1a;勤勉&#xff0c;不懈怠。指工作或學習勤奮不知疲倦。&#x1f493;&#x1f493;&#x1f493; 目錄 說在前面 題目一&#xff1a;返回倒數第k個節點 題目二&#xff1a;鏈表的回文結構 題目三&#xff1a;相交鏈表 SUMUP結尾 說在前…

Pytorch: 解決因pytorch版本不同 導致訓練ckpt加載失敗

大家都會遇到在工程項目實施階段&#xff0c;如果訓練的模型文件在不同的torch版本環境下部署時&#xff0c;會報錯~。 報錯舉例 # 查看torch環境 import torch print(torch.__version__)# 訓練時環境&#xff1a;torch 1.8.2cu111 # 部署時環境&#xff1a;torch 1.4.0torch.…

dcatAdmin框架 使用phpword 生成word文件

下載phpword插件 composer require phpoffice/phpword 生成word文件接口 static public function word(){//接收傳值$order_id request()->get(order_id);$tpl_id request()->get(tpl_id);//查詢出對應的數據以及關聯數據$sale_order \App\Models\SaleOrder::with([…

Python異步編程之基礎概念

Python異步編程之基礎概念 在現代編程中&#xff0c;異步編程是一種重要的技術&#xff0c;尤其是在處理I/O密集型任務時&#xff0c;異步編程可以大大提高程序的性能和響應速度。本文將介紹Python異步編程的基礎概念&#xff0c;幫助你理解其原理和應用。 什么是異步編程&am…

【代碼隨想錄算法訓練營第37期 第十七天 | LeetCode110.平衡二叉樹、257. 二叉樹的所有路徑、404.左葉子之和】

代碼隨想錄算法訓練營第37期 第十七天 | LeetCode110.平衡二叉樹、257. 二叉樹的所有路徑、404.左葉子之和 一、110.平衡二叉樹 解題代碼C&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *righ…

三、NVIDIA Jetson Orin開發板-GPU加速

一、NVIDIA Jetson Orin開發板的硬件情況 df -h#查看操作系統情況Filesystem Size Used Avail Use% Mounted on **/dev/nvme0n1p1** 234G 17G 208G 8% / none 7.4G 0 7.4G 0% /dev tmpfs 7.6G 0 7.6G 0% /dev/shm tmpfs …

LeetCode 2644.找出可整除性得分最大的整數:暴力模擬(兩層循環)

【LetMeFly】2644.找出可整除性得分最大的整數&#xff1a;暴力模擬&#xff08;兩層循環&#xff09; 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/find-the-maximum-divisibility-score/ 給你兩個下標從 0 開始的整數數組 nums 和 divisors 。 divisors[i] 的 …

MySQL庫/表/數據的操作

文章目錄 1.數據庫操作1.1 創建、刪除、查看和修改1.2 編碼格式1.3 備份和恢復 2.表的操作2.1 創建表2.2 存儲引擎2.3 查看表、修改表、刪除表 3.數據類型3.1整數類型3.2字節類型(bit)3.3浮點類型(bit)3.4 decimal3.5 字符串類型3.6 日期和時間類型3.7 enum和set關于如何查找想…

webpack 學習之 五大核心

為什么用 webpack webpack 官網傳送門 … 官網&#xff1a;webpack 是一個用于現代 JavaScript 應用程序的 靜態模塊打包工具。將你項目中所需的每一個模塊組合成一個或多個 bundles&#xff0c;它們均為靜態資源&#xff0c;用于展示你的內容。總結&#xff1a;匯總所有模塊…

Python中別再用 ‘+‘ 拼接字符串了!

大家好&#xff0c;在 Python 編程中&#xff0c;我們常常需要對字符串進行拼接。你可能會自然地想到用 操作符將字符串連接起來&#xff0c;畢竟這看起來簡單明了。 在 Python 中&#xff0c;字符串是不可變的數據類型&#xff0c;這意味著一旦字符串被創建&#xff0c;它就…

【Python】—— lambda表達式

目錄 &#xff08;一&#xff09;應用場景 &#xff08;二&#xff09;lambda 語法 &#xff08;三&#xff09;示例分析 &#xff08;四&#xff09;lambda參數形式 4.1 無參數 4.2 一個參數 4.3 默認參數 4.4 可變參數 &#xff1a;*args 4.5 可變參數 &#xff1a;…

【Python爬蟲】案例_github模擬登錄

import requests import re from datetime import datetimedef login():sessionrequests.session()session.headers {User-Agent :XXXX #寫自己的}url1 https://github.com/loginres_1 session.get(url1).content.decode()token re.findall(name"authenticity_token&q…

基于Matlab實現BP神經網絡的手寫數字識別

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 手寫數字識別是計算機視覺和模式識別領域的一個經典問題&#xff0c;具有廣泛的應用場景&…

信息安全從業者書單推薦

作為一名網安人&#xff0c;身上肩負的責任是很大的&#xff0c;能力越大&#xff0c;責任也越大&#xff0c;反過來責任越大&#xff0c;能力也必須跟得上。不管是想進這行&#xff0c;還是已經在這行&#xff0c;持續學習肯定是不能缺少的&#xff0c;除了在工作中積累&#…

qt多語言翻譯不生效的原因

假設您有QT語言家的基礎知識&#xff0c;假設網上那些所有的問題您都已經排查過了&#xff0c;但依然翻譯不生效&#xff0c;那么可以看下這篇帖子&#xff0c;其實就一個問題&#xff0c;變量的生命周期&#xff0c;假設QTranslator是一個函數內的變量&#xff0c;且沒有被聲明…

億圖圖示——刪除水印

一、文件以PPT格式導出 二、點擊水印所在區域&#xff0c;點擊多次delete鍵 三、調整PPT頁面尺寸 四、轉成PDF 五、PDF轉成圖片

Spring的Profile功能及其應用場景

Spring的Profile功能是一種條件化配置機制&#xff0c;它允許開發者根據不同的運行環境或條件來定義和使用不同的bean和配置。Profile功能使得Spring應用程序可以靈活地適應不同的部署場景&#xff0c;而無需修改代碼。 Profile功能的作用&#xff1a; 環境隔離&#xff1a;可…

從0開始寫一個環境保護網站的第3天(JAVAWEB)

1.目標 實現首頁的環境保護原因的查詢&#xff0c;和底部友情連接部分 2.實現 2.1建立數據庫表格&#xff08;這里數據全是百度查詢&#xff09; 環境保護原因表&#xff1a; 友情連接表&#xff1a;&#xff08;數據來源https://zhuanlan.zhihu.com/p/696243646&#xff0…

SqlSession是什么?在MyBatis-Spring中有什么應用?

目錄 一、SqlSession是什么 二、SqlSession在MyBatis中的應用 三、SqlSession在Spring中的應用 一、SqlSession是什么 SqlSession 是 MyBatis 框架中的一個核心概念&#xff0c;它代表與數據庫的一次會話。MyBatis 是一個流行的 Java 持久層框架&#xff0c;用于簡化數據庫…