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

借助Excel实现Word表格快速排序

实例需求:Word中的表格如下图所示,为了强化记忆,希望能够将表格内容随机排序,表格第一列仍然按照顺序编号,即编号不跟随表格行内容调整。

在这里插入图片描述

乱序之后的效果如下图所示(每次运行代码的结果都不一定相同)。

在这里插入图片描述

示例代码如下。

Sub SortTab()Dim oTab As Table, aData, sTxt As StringSet oTab = ActiveDocument.Tables(1)Dim oRow As Row, oCell As Cell, iR As Long, iC As LongReDim aData(1 To oTab.Rows.Count, 1 To oTab.Columns.Count)RandomizeFor Each oRow In oTab.RowsiR = iR + 1: iC = 0For Each oCell In oRow.CellsiC = iC + 1If iC = 1 ThenaData(iR, iC) = Rnd() * 10000ElsesTxt = oCell.Range.TextaData(iR, iC) = Left(sTxt, Len(sTxt) - 2)End IfNextNextDim xlApp, xlWK, xlShtSet xlApp = CreateObject("excel.application")'Set xlApp = GetObject(, "excel.application")xlApp.Visible = FalseSet xlWK = xlApp.workbooks.AddSet xlSht = xlApp.activesheetWith xlSht.Range("A1").Resize(UBound(aData), UBound(aData, 2)).Value = aData.currentregion.Sort key1:=.Cells(1), header:=0aData = .currentregion.ValueEnd WithxlWK.Close FalsexlApp.QuitSet xlApp = NothingiR = 0For Each oRow In oTab.RowsiR = iR + 1: iC = 0For Each oCell In oRow.CellsiC = iC + 1If iC > 1 ThenoCell.Range.Text = aData(iR, iC)End IfNextNext
End Sub

【代码解析】
第3行代码获取Word文档中的第一个表格对象。
第5行代码为动态数组分配存储空间。
第6行代码初始化随机生成器。
第7~18行代码循环遍历Word表格。
第9~17行代码循环Word表格行中的全部单元格。
第12行代码对于第一列填充随机数,用于后续排序,以实现随机乱序。
第14行代码读取单元格内容。
第15行代码将文本保存到数组中。
第20行代码创建新的Excel应用,如果已经打开Excel,那么使用第21行代码获取Excel对象会更快捷。
第22行代码隐藏Excel应用程序。
第23行代码添加Excel工作簿。
第24行代码获取活动工作表。
第26行代码将数组写入到工作表。
第27行代码根据A列进行排序。
第28行代码将排序后的表格读取到数组中。
第30行代码关闭工作簿。
第31行代码关闭Excel应用程序。
第34~42行代码循环遍历Word表格,更新单元格内容,第一列序号保持不变,所有无需更新。
第39行代码将数组内容写入单元格。


借助Excel完成排序只是一种实现思路,当然也可以使用其他算法对数组直接进行随机排序。

http://www.lryc.cn/news/485369.html

相关文章:

  • 数据结构 ——— 层序遍历链式二叉树
  • 使用 Prompt API 与您的对象聊天
  • SpringBoot整合Mybatis-Plus实践汇总
  • 基于Spring Boot的在线性格测试系统设计与实现(源码+定制+开发)智能性格测试与用户个性分析平台、在线心理测评系统的开发、性格测试与个性数据管理系统
  • Python实现人脸识别算法并封装为类库
  • uniapp小程序分享使用canvas自定义绘制 vue3
  • SpringCloud核心组件(四)
  • 如何把本地docker 镜像下载用到centos系统中呢?
  • Godot的开发框架应当是什么样子的?
  • GitHub新手入门 - 从创建仓库到协作管理
  • 作业25 深度搜索3
  • ubuntu20.04 colmap 安装2024.11最新
  • WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇
  • python os.path.basename(获取路径中的文件名部分) 详解
  • 《FreeRTOS任务基础知识以及任务创建相关函数》
  • 036集——查询CAD图元属性字段信息:窗体显示(CAD—C#二次开发入门)
  • Swift从0开始学习 函数和闭包 day2
  • 内网、公网(外网)划分
  • 【linux】centos7 换阿里云源
  • 用OMS进行 OceanBase 租户间数据迁移的测评
  • 【因果分析方法】MATLAB计算Liang-Kleeman信息流
  • 【Java基础知识系列】之Java类的初始化顺序
  • Swift 宏(Macro)入门趣谈(二)
  • vue elementui el-dropdown-item设置@click无效的解决方案
  • 如何用re从第1排第2个位置中找到两个数字返回(0,1)
  • vue中的keep-alive是什么,有哪些使用场景,使用了什么原理,缓存后如何更新数据
  • LeetCode105.从前序与中序遍历构造二叉树
  • LeetCode654.最大二叉树
  • C# 字段和属性
  • 【leetcode】N皇后 回溯法c++