宏_wps_宏修改word中所有excel表格的格式_设置字体对齐格式_删除空行等
需求:
将word中所有excel表格的格式进行统一化,修改其中的数字类型为“宋体, 五号,右对齐, 不加粗,不倾斜”,其中的中文为“宋体, 五号, 不加粗,不倾斜”
数字类型有:范围型的比如 10-20, 百分比类型的 6%, 整型的 1, 5, 浮点型的 -124,430.00, 124,430.00
宏实现:
启用宏设置: 文件-》选项-》新建选项卡-》新建分组-》搜索开发工具命令,添加到新建分组

在界面中即可看到 开发工具按钮,点击,即可看到宏的相关按钮:

输入一个宏的名字,点击创建宏,然后,点击编辑,输入如下宏代码,点击运行即可

wps中默认使用JavaScript作为宏的默认语言,示例如下
function FormatExcel() {// 匹配一个数值范围字符串 "10-12" "10.3 -20.3 " "-10.4 - 20" "-10.4--20.4" // const rangeRegex = /^-?\d+(\.\d+)?( *)?-( *)?(-?\d+(\.\d+)?)( *)?.[\s\S]*$/;const rangeRegex = /^-?\d+(\.\d+)?( *)?-( *)?(-?\d+(\.\d+)?)( *)?([\s\S]*)?$/;var doc = Application.ActiveDocument;for (var tableIndex = 1; tableIndex <= doc.Tables.Count; tableIndex++) {var table = doc.Tables.Item(tableIndex);var rows = table.Rows.Count;var cols = table.Columns.Count;// 遍历表格for (var r = 1; r <= rows; r++) {for (var c = 1; c <= cols; c++) {if (r > table.Rows.Count || c > table.Columns.Count) {continue;}//可选,跳过所有表格的第一列 //需求:属性列不需要修改if(c === 1){continue;}try {// console.log( "r,c = " + r +","+ c)var cell = table.Cell(r, c); //合并单元格不能被这样访问所以try-catch下var cellRange = cell.Range;var textContent_src = cellRange.Text.replace(/[\r\n]/g, ""); // 去掉段落标记textContent_src = textContent_src.replace(/[\x00-\x1F\x7F]/g, ''); // 去除BEL字符或其他不可见控制字符console.log("textContent_src: [" + textContent_src +"]" + ", Chin?: " + containsChinese(textContent_src)) if (!containsChinese(textContent_src)){ // 是数字:处理带逗号的数字,格式化并右对齐textContent = textContent_src.replace(/,/g, ""); // 去掉逗号textContent = parseFloat(textContent)//console.log("toFloat:[" + parseFloat(textContent)+"]")if (!isNaN(textContent)) {// 去除前后的空格textContent_src_trimmed = textContent_src.trim().trimEnd();// such as "3% ", "5%、7% "if (textContent_src_trimmed.includes('%')){textContent_out = textContent_src_trimmed; }// 范围数值,such as "12-20 ", "4.50-10.00 ", "-4.50 - -10.00"else if (rangeRegex.test(textContent_src_trimmed)){textContent_out = textContent_src_trimmed;}// 整型数值,such as " -5", "1 ", " 66 " //可以去除前后的空格else if (!textContent_src.includes('.')){textContent_out = textContent;}// 浮点数值,such as " 5.00 ", " -915,507.02 ", "915,507.02 "else {textContent_out =textContent.toLocaleString("en-US", {minimumFractionDigits: 2,maximumFractionDigits: 2});}cellRange.Text = textContent_out;cellRange.Font.Name = "宋体";cellRange.Font.Size = 10.5; //五号cellRange.ParagraphFormat.Alignment = wdAlignParagraphRight; //右对齐cellRange.Font.Italic = false; //不倾斜cellRange.Font.Bold = false; //不加粗}} else {// 含有中文的单元格,移除前面空格并居中//不支持移除后面的空格// textContent_src = textContent_src.trim(); //TBDcellRange.Text = textContent_src;cellRange.Font.Name = "宋体";cellRange.Font.Size = 10.5; //五号cellRange.Font.Italic = false; //不倾斜cellRange.Font.Bold = false; //不加粗// cellRange.ParagraphFormat.Alignment = wdAlignParagraphCenter; //居中对齐}} catch (error) {// console.log('获取单元格时出错(可能是合并单元格/不处理):', error.message);}}}}
}function containsChinese(str) {const chineseRegex = /[\u4e00-\u9fff]/;return chineseRegex.test(str);
}
效果:
右侧为原始数据,左侧为修改后的数据


进行空行的删除
接下来,进行空行的删除,若是没有合并行的单元格比较容易删除,使用
table.Rows.Item(rowsToDelete[l]).Delete();
先找到满足条件的需要删除的行,然后删除行,即可。
若是合并的行,则不能使用table.Rows.Item(rowsToDelete[l]).Delete();进行删除,需要使用cell一个一个删除:
table.Cell(rowsToDelete[l], c).Delete();
整体代码如下:
function FormatExcelLZ() {// 匹配一个数值范围字符串 "10-12" "10.3 -20.3 " "-10.4 - 20" "-10.4--20.4" // const rangeRegex = /^-?\d+(\.\d+)?( *)?-( *)?(-?\d+(\.\d+)?)( *)?.[\s\S]*$/;const rangeRegex = /^-?\d+(\.\d+)?( *)?-( *)?(-?\d+(\.\d+)?)( *)?([\s\S]*)?$/;var doc = Application.ActiveDocument;for (var tableIndex = 1; tableIndex <= doc.Tables.Count; tableIndex++) {var table = doc.Tables.Item(tableIndex);var rows = table.Rows.Count;var cols = table.Columns.Count;var rowsToDelete = [];// 遍历表格for (var r = 1; r <= rows; r++) {var shouldDeleteCounter = 0;for (var c = 1; c <= cols; c++) {if (r > table.Rows.Count || c > table.Columns.Count) {continue;}//可选,跳过所有表格的第一列 //需求:属性列不需要修改if(c === 1){continue;}try {// console.log( "r,c = " + r +","+ c)var cell = table.Cell(r, c); //合并单元格不能被这样访问所以try-catch下var cellRange = cell.Range;var textContent_src = cellRange.Text.replace(/[\r\n]/g, ""); // 去掉段落标记textContent_src = textContent_src.replace(/[\x00-\x1F\x7F]/g, ''); // 去除BEL字符或其他不可见控制字符console.log("textContent_src: [" + textContent_src +"]" + ", Chin?: " + containsChinese(textContent_src)) cellText = textContent_src.trim().trimEnd();console.log("cellText: [" + cellText + "]");// 如果单元格内容不为空、不为0.00、不为"--",则该行不应删除if (cellText === ""|| cellText === "0.00" || cellText === "0.0" || cellText === "0" || cellText === "--"|| cellText === "-"|| cellText === "——" || cellText === "—"|| cellText === "-") // 不同与字符 "-"{shouldDeleteCounter += 1;} if (!containsChinese(textContent_src)){ // 是数字:处理带逗号的数字,格式化并右对齐textContent = textContent_src.replace(/,/g, ""); // 去掉逗号textContent = parseFloat(textContent)//console.log("toFloat:[" + parseFloat(textContent)+"]")if (!isNaN(textContent)) {// 去除前后的空格textContent_src_trimmed = textContent_src.trim().trimEnd();// such as "3% ", "5%、7% "if (textContent_src_trimmed.includes('%')){textContent_out = textContent_src_trimmed; }// 范围数值,such as "12-20 ", "4.50-10.00 ", "-4.50 - -10.00"else if (rangeRegex.test(textContent_src_trimmed)){textContent_out = textContent_src_trimmed;}// 整型数值,such as " -5", "1 ", " 66 " //可以去除前后的空格else if (!textContent_src.includes('.')){textContent_out = textContent;}// 浮点数值,such as " 5.00 ", " -915,507.02 ", "915,507.02 "else {textContent_out =textContent.toLocaleString("en-US", {minimumFractionDigits: 2,maximumFractionDigits: 2});}cellRange.Text = textContent_out;cellRange.Font.Name = "宋体";cellRange.Font.Size = 10.5; //五号cellRange.ParagraphFormat.Alignment = wdAlignParagraphRight; //右对齐cellRange.Font.Italic = false; //不倾斜cellRange.Font.Bold = false; //不加粗}} else {// 含有中文的单元格,移除前面空格并居中//不支持移除后面的空格// textContent_src = textContent_src.trim(); //TBDcellRange.Text = textContent_src;cellRange.Font.Name = "宋体";cellRange.Font.Size = 10.5; //五号cellRange.Font.Italic = false; //不倾斜cellRange.Font.Bold = false; //不加粗// cellRange.ParagraphFormat.Alignment = wdAlignParagraphCenter; //居中对齐}} catch (error) {console.log('1获取单元格时出错(可能是合并单元格/不处理):', error.message);}}// 跳过了第一列,所以这里-1if (shouldDeleteCounter === cols -1 ) {rowsToDelete.push(r);}}// 从后往前删除行for (var l = rowsToDelete.length - 1; l >= 0; l--) {try{table.Rows.Item(rowsToDelete[l]).Delete();} catch (error){console.log('无法通过table.Rows.Item访问行,可能因为有合并的行:', error.message);// 从后往前删除列元素for (var c = cols; c > 0; c--) {var cell_cur = table.Cell(rowsToDelete[l], c);cell_cur.Delete();}}}}console.log('======done=====');
}function containsChinese(str) {const chineseRegex = /[\u4e00-\u9fff]/;return chineseRegex.test(str);
}
使用时,可以将 console.log行注释掉,提供处理速度,不注释也不影响功能。
删除空行效果:
没有合并行的删除:(为了方便检查,没有删除表头)

有合并行的删除:

相关网GPT网站:WPS 灵犀
相关文章:
宏_wps_宏修改word中所有excel表格的格式_设置字体对齐格式_删除空行等
需求: 将word中所有excel表格的格式进行统一化,修改其中的数字类型为“宋体, 五号,右对齐, 不加粗,不倾斜”,其中的中文为“宋体, 五号, 不加粗,不倾斜” 数…...
Linux——网络(udp)
文章目录 目录 文章目录 前言 一、upd函数及接口介绍 1. 创建套接字 - socket 函数 2. 绑定地址和端口 - bind 函数 3. 发送数据 - sendto 函数 4. 接收数据 - recvfrom 函数 5. 关闭套接字 - close 函数 二、代码示例 1.服务端 2.客户端 总结 前言 Linux——网络基础…...
Oracle-Java JDBC 连接超时之后的认知纠正
背景 偶然读到熊老师的文章《老熊的三分地-JDBC中语句超时与事务》了解到:JAVA代码的最后正常断开数据库连接,在默认情况下,正常断开的数据库连接会自动提交没有提交的事务。 通过文章的测试JAVA程序,可以表明,JDB…...
自定义数据集使用框架的线性回归方法对其进行拟合
代码 import torch import numpy as np import torch.nn as nncriterion nn.MSELoss()data np.array([[-0.5, 7.7],[1.8, 98.5],[0.9, 57.8],[0.4, 39.2],[-1.4, -15.7],[-1.4, -37.3],[-1.8, -49.1],[1.5, 75.6],[0.4, 34.0],[0.8, 62.3]])x_data data[:, 0] y_data data…...
15天基础内容-5
day13 【String类、StringBuilder类】 主要内容 String类常用方法【重点】 String类案例【重点】 StringBuilder类【重点】 StringBuilder类常用方法【重点: append】 StringBuilder类案例【理解】 第一章String类 1.1 String类的判断方法 String类实现判断功能…...
82,【6】BUUCTF WEB .[CISCN2019 华东南赛区]Double Secret
进入靶场 提到了secret,那就访问 既然这样,那就传参看能不能报错 这个页面证明是有用的 传参长一点就会报错,传什么内容无所谓 所以网站是flask框架写的 有一个颜色深一点,点开看看 rc4加密url编码 import base64 from urllib…...
Android WebView 中网页被劫持的原因及解决方案
文章目录 一、原因分析二、解决方案一览三、解决方案代码案例3.1 使用 HTTPS3.2 验证 URL3.3 禁用 JavaScript3.4 使用安全的 WebView 设置3.5 监控网络请求3.6 使用安全的 DNS 四、案例深入分析4.1 问题4.2 分析 五、结论 在 Android 应用开发中,WebView 是一个常用…...
特朗普政府将开展新网络攻击
近日,特朗普政府已表态:减少物理战争,网络战将代替,以实现美国的全球优势。 特朗普也指示美国网络司令部可以在没有总统批准的情况下开展更广泛行动,尤其是应对一些突发事件,这其实成为了后续美国通过网络…...
快递代取项目Uniapp+若依后端管理
快递接单代取得uniappspringboot项目 实际效果图...
arcgis短整型变为长整型的处理方式
1.用QGIS的重构字段工具进行修改,亲测比arcgis的更改字段工具有用 2.更换低版本的arcgis10.2.2,亲测10.5和10.6都有这个毛病,虽然官方文档里面说的是10.6.1及以上 Arcgis10.2.2百度链接:https://pan.baidu.com/s/1HYTwgnBJsBug…...
06、Redis相关概念:缓存击穿、雪崩、穿透、预热、降级、一致性等
Redis相关概念:缓存击穿、雪崩、穿透、预热、降级、一致性等 Redis缓存雪崩、缓存击穿、缓存预热热点key、缓存降级、短链接、分布式锁秒杀、预减库存、 堆外缓存Redis架构设计、Redis动态刷新、Redis和DB双写一致性、过期删除策略、集群数据倾斜等一、缓存雪崩 缓…...
嵌入式基础 -- PCIe 控制器中断管理之MSI与MSI-X简介
PCIe 控制器中断管理技术文档 1. 背景 在现代计算机系统中,中断是设备与 CPU 通信的重要机制,PCIe 控制器提供了从传统线中断到基于消息的中断(MSI/MSI-X)的演进,以提升中断处理效率和可扩展性。x86 和 ARM 架构虽然…...
websocket实现
由于安卓资源管理器展示的路径不尽相同,各种软件保存文件的位置也不一定一样.对于普通用户上传文件时,查找文件可能是一个麻烦的事情.后来想到了一个办法,使用pc端进行辅助上传. 文章目录 实现思路1.0 实现定义web与客户端通信数据类型和数据格式web端websocket实现web端对客户…...
unity学习20:time相关基础 Time.time 和 Time.deltaTime
目录 1 unity里的几种基本时间 1.1 time 相关测试脚本 1.2 游戏开始到现在所用的时间 Time.time 1.3 时间缩放值 Time.timeScale 1.4 固定时间间隔 Time.fixedDeltaTime 1.5 两次响应时间之间的间隔:Time.deltaTime 1.6 对应测试代码 1.7 需要关注的2个基本…...
【C++】特殊类设计、单例模式与类型转换
目录 一、设计一个类不能被拷贝 (一)C98 (二)C11 二、设计一个类只能在堆上创建对象 (一)将构造函数私有化,对外提供接口 (二)将析构函数私有化 三、设计一个类只…...
scratch七彩六边形 2024年12月scratch三级真题 中国电子学会 图形化编程 scratch三级真题和答案解析
目录 scratch七彩六边形 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、…...
代码随想录刷题day16|(哈希表篇)349.两个数组的交集
目录 一、哈希表理论基础 二、集合set在哈希法中的应用 三、相关算法题目 四、相关知识点 1.set集合特点和常用方法 1.1 set集合概述 1.2 set集合特点 1.3 常用方法 2.set集合转换成数组 法1:另新建一个数组 法2:将结果集合转为数组 ▲ 3.数组…...
Synology 群辉NAS安装(6)安装mssql
Synology 群辉NAS安装(6)安装mssql 写在前面mssql 2019:成功安装说明,这个最终成功了 mssql 2022没有成功1. pull image2.启动mssql docker container 远程连接 写在前面 mssq是一个重要节点。 这是因为我对mysql没有一丝好感。虽然接触了许…...
2025年美赛B题-结合Logistic阻滞增长模型和SIR传染病模型研究旅游可持续性-成品论文
模型设计思路与创新点: 建模的时候应该先确定我们需要建立什么类的模型?优化类还是统计类?这个题需要大量的数据分析,因此我们可以建立一个统计学模型。 统计学建模思路:观察规律,建立模型,参…...
Hook 函数
什么是hook函数? 在计算机编程中,hook函数是指在特定的事件发生时被调用的函数,用于在事件发生前或后进行一些特定的操作。通常,hook函数作为回调函数被注册到事件处理器中,当事件发生时,事件处理器会自动…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
