VBA实现Word表格排序

实例需求:
在Word文档的多列表格中,需要按照第一列进行排序,同时保持其他列的数据对应顺序不变。想必大家都知道,在Excel中可以简单地使用排序功能实现这种需求,但是对于Word表格则需要使用VBA代码进行处理。

原始数据:

fruitvegetable
appleeggplant
pearcarrot
applecabbage
applepotato
pearyam
orangemarrow

排序后的数据:
(第二列保留其在原始表格中的先后顺序)

fruitvegetable
appleeggplant
applecabbage
applepotato
pearcarrot
pearyam
orangemarrow

示例代码:

Sub SortTableInWord()Dim oTable As TableDim aData(), TempDim i As Long, j As LongDim RowsCnt As Long, c As RangeDim Dic As Object, aKey, aItem, kSet oTable = ActiveDocument.Tables(1)RowsCnt = oTable.Rows.CountReDim aData(1 To RowsCnt, 1 To 2)For i = 1 To RowsCntFor j = 1 To 2Set c = oTable.Cell(i, j).RangeaData(i, j) = ActiveDocument.Range(c.Start, c.End - 1).TextNext jNext iSet Dic = CreateObject("scripting.dictionary")For i = 2 To RowsCntTemp = aData(i, 1)If Dic.Exists(Temp) ThenDic(Temp) = Dic(Temp) & "|" & aData(i, 2)ElseDic(Temp) = aData(i, 2)End IfNext iaKey = Dic.keysFor i = 0 To Dic.Count - 1For j = i + 1 To Dic.Count - 1If aKey(i) = aKey(j) ThenTemp = aKey(i)aKey(i) = aKey(j)aKey(j) = TempEnd IfNext jNext ij = 2For i = 0 To Dic.Count - 1aItem = Split(Dic(aKey(i)), "|")For k = 0 To UBound(aItem)oTable.Cell(j, 1).Range.Text = aKey(i)oTable.Cell(j, 2).Range.Text = aItem(k)j = j + 1NextNext i
End Sub

【代码解析】
第7行代码获取活动文档中的第一个表格对象。
第8行代码获取表格行数。
第9行代码定义二维数组存表格数据。
第10~15行代码双层For循环加载表格数据到数组。
第12行代码获取单元格Range对象。
第13行代码读取单元格文本到数组,其中Range(c.Start, c.End - 1)用于剔除单元格内容结尾的Chr(13),也可以读取Text属性后,使用Replace函数进行替换。
第16行代码创建字典对象。
第17~24行代码循环处理每行数据。
第18行代码获取当前行第一列值为字典对象的键。
第19~23行代码判断键是否存在。

  • 如果存在,则第20行代码将表格中第2列的值追加到字典中,使用竖线作为分隔符。
  • 如果不存在,则第22行代码在字典对象中增加新键。

第25行代码获取字典键列表。
第26~34行代码使用双层For循环对字典键列表排序。
第28~32行代码交换变量实现排序。
第35行代码初始化写入行号。
第36~43行代码循环写入排序后的数据。
第37行代码拆分值列表。
第39~41行代码写入键和对应值。
第42行代码行号指针加一。


小结:

利用字典对象可以方便地存储表格数据,通过键值对应关系保证排序后数据顺序正确性,如果使用普通的排序算法对于二维数组排序,那么在排序过程中交换数组元素时,将打乱第2列数据的顺序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二刷力扣--哈希表

哈希表 哈希表可以根据键在O(1)时间内进行访问。 哈希表实际上可以看成是一个数组,但是可以通过哈希函数计算出数组下标,直接访问。 常用的有集合set(),字典dict()。 有效的字母异位词 242. #字典 给定两个字符串 s 和 t ,编写…

Linux查询服务器配置(CPU、内存RAM等)命令

lshw -short 更多命令参考地址:查看linux服务器配置详解_笔记大全_设计学院

《C++标准库第2版》3.1 C++11语言新特性 笔记

3.1 C11 语言新特性 3.1.1 微小但是重要的语法提升 ​ 1.template 表达式内的空格 ​ 在两个template表达式的闭符之间放一个空格已经过时&#xff0c;目前两个版本的C11以后两个版本都支持 vector<list<int> >; // 这是以前的版本 vector<list<int>&…

PbootCMS在搭建网站

1、打开网站 https://www.pbootcms.com/ 2、点击 “本站” 下载最新的网站代码 3、在本地laragon/www下创建目录&#xff08;hejuwuye&#xff09;&#xff0c;并将代码放进去 4、创建本地数据库&#xff0c;数据库名称为&#xff1a; hejuwuye&#xff0c;然后将static/bac…

快速傅里叶变换

引言 目标 傅里叶变化&#xff08;Fourier transform&#xff09;是一种信号处理技术&#xff0c;它可以将时间信号转换为频率信号&#xff0c;即将一组具有相同数量频率的正弦波叠加在一起&#xff0c;形成一组新的正弦波。如果我们把时间信号从频域转换到时域&#xff0c;那么…

SLAM ORB-SLAM2(1)总体框架

SLAM ORB-SLAM2(1)总体框架 1. 简介2. 框架3. TRACKING4. LOCAL MAPPING5. LOOP CLOSING6. MAP1. 简介 ORB-SLAM2 是一个实时和完整的视觉SLAM系统(包括闭环检测、重定位、地图重用等功能) 提供了利用单目、双目以及RGB-D相机完成稀疏三维重建的功能和接口 2. 框架 总体来说…

python项目制作docker镜像,加装引用模块,部署运行!

一、创建Dockerfile # 基于python:3.10.4版本创建容器 FROM python:3.10.4 # 在容器中创建工作目录 RUN mkdir /app # 将当前Dockerfile目录下的所有文件夹和文件拷贝到容器/app目录下 COPY . /app# 由于python程序用到了requests模块和yaml模块&#xff0c; # python:3.10.4基…

二叉树进阶练习

目录 一、根据二叉树创建字符串 二、二叉树的最近公共祖先 三、二叉搜索树与双向链表 四、从前序与中序遍历序列构造二叉树 五、从中序与后序遍历序列构造二叉树 六、二叉树的前序遍历&#xff08;非递归实现&#xff09; 七、二叉树的中序遍历&#xff08;非递归实现&a…

紫光展锐5G芯T820 解锁全新应用场景,让机器人更智能

数字经济的持续发展正推动机器人产业成为风口赛道。工信部数据显示&#xff0c;2023年上半年&#xff0c;我国工业机器人产量达22.2万套&#xff0c;同比增长5.4%&#xff1b;服务机器人产量为353万套&#xff0c;同比增长9.6%。 作为国内商用服务机器人领先企业&#xff0c;云…

应用在儿童平板防蓝光中的LED防蓝光灯珠

现在电子产品多&#xff0c;手机、平板电脑、电子书等等&#xff0c;由于蓝光有害眼睛健康&#xff0c;于是市场上有很多防蓝光的眼镜、防蓝光的手机膜、防蓝光的平板&#xff0c;这些材料和设备到底有没有用&#xff1f;如何正确预防蓝光危害呢&#xff1f; 我们现在所用的灯…

NCTF-2019-Crypto部分 复现

文章目录 SorechildRSAeasyRSAbabyRSA Sore 题目描述&#xff1a; task.py from string import ascii_letters from flag import flagctoi lambda x: ascii_letters.index(x) # 获得所有字母的字符串 itoc lambda x: ascii_letters[x] # 将索引值转换为字母key flag.strip…

关于 Resolution(分辨率、解析力)各单位的意义及相互之间的换算

1、问题背景 最近在调试的项目&#xff0c;有关于对解析力的要求&#xff0c;用 imatest 软件测试 MTF50 的值&#xff0c;如下图所示&#xff0c;可以看到他有不同的单位表示&#xff0c;LW/PH、Cycles/pixel 。另外关于解析力的单位还有LP/mm、L/mm、Cycles/mm、LP/PH&#…

MySQL安装validate_password_policy插件

功能介绍 validate_password_policy 是插件用于验证密码强度的策略。该参数可以设定三种级别&#xff1a;0代表低&#xff0c;1代表中&#xff0c;2代表高。 validate_password_policy 主要影响密码的强度检查级别&#xff1a; 0/LOW&#xff1a;只检查密码长度。 1/MEDIUM&am…

jsoup框架技术文档--java爬虫--基本概念

阿丹&#xff1a; 之前使用python写的爬虫&#xff0c;但是现在项目的技术选型是需要使用jsoup来爬取网页的数据。那就需要重新学习一个框架。首先了解一下整体框架的基本概念。 jsoup的概念 JSoup是一个开源的Java库&#xff0c;它用于处理HTML文档&#xff0c;类似于一个用于…

QT tcpserver

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 服务端有QTcpServer库&#xff0c;封装了监听操作server new QTcpServer();// 直接监听&#xff0c;内部根…

Object的常用方法

目录 1.getClass()&#xff1a;获得运行时类型 2.hashCode()&#xff1a;获取哈希值 3.equals()&#xff1a;比较方法 4.clone()&#xff1a;实现对象的浅拷贝方法 5.toString()&#xff1a;输出为String 6.notify()&#xff1a;唤醒线程 7.notifyAll()&#xff1a;…

MVSNet CVPR-2018 学习总结笔记 译文 深度学习三维重建

文章目录 2 MVSNet CVPR-20182.0 主要特点2.1 过程2.2 MVSNet主要贡献2.3 论文简介2.3.1 深度特征提取2.3.2 构造匹配代价2.3.3 代价累计2.3.4 深度估计2.3.5 深度图优化2.4 MVSNet(pytorch版本)2 MVSNet CVPR-2018 MVSNet (pytorch版) 代码注释版 下载 (注释非常详细,代码…

IO流(IO Stream)

​ 一、概述 我们已经系统学习了File 类&#xff0c;并且已经知道 File 类的实例用于表示文件或目录的路径 名。 虽然我们可以通过 File 实例来访问文件或目录的元数据&#xff0c;甚至可以创建、删除文件或目 录&#xff0c;但是&#xff0c;我们却不能通过File实例来访问文…

春秋云镜 CVE-2015-1427

春秋云镜 CVE-2015-1427 ElasticSearch RCE 靶标介绍 ElasticSearch RCE 启动场景 漏洞利用 因查询时至少要求es中有一条数据&#xff0c;所以发送如下数据包&#xff0c;增加一个数据&#xff1a; POST /website/blog/ HTTP/1.1 Host: eci-2zedttamjkr80i9iubel.cloudeci…

Java基础11——抽象类和接口

Java基础11——抽象类和接口 抽象类和抽象方法 区分普通方法和抽象方法 在Java 中&#xff0c;当一个类被 abstract 关键字修饰的时候这个类称为抽象类。当一个类的方法被 abstract 关键字修饰的时候&#xff0c;该方法称为抽象 方法。抽象方法必须定义在抽象类中。当一个方…