宏_wps_宏修改word中所有excel表格的格式_设置字体对齐格式_删除空行等

news2025/2/1 7:15:44

需求:

将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(); //TBD
	                    cellRange.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(); //TBD
	                    cellRange.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);
                }
            }
            
            // 跳过了第一列,所以这里-1
            if (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 灵犀

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

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

相关文章

xss靶场

xss-labs下载地址&#xff1a;GitHub - do0dl3/xss-labs: xss 跨站漏洞平台 xss常见触发标签&#xff1a;XSS跨站脚本攻击实例与防御策略-CSDN博客 level-1 首先查看网页的源代码发现get传参的name的值test插入了html里头&#xff0c;还回显了payload的长度。 <!DOCTYPE …

线段树(Segment Tree)和树状数组

线段树&#xff08;Segment Tree&#xff09;和树状数组 线段树的实现链式&#xff1a;数组实现 解题思路树状数组 线段树是 二叉树结构 的衍生&#xff0c;用于高效解决区间查询和动态修改的问题&#xff0c;其中区间查询的时间复杂度为 O(logN)&#xff0c;动态修改单个元素的…

MySQL注入中load_file()函数的使用

前言 在Msql注入中&#xff0c;load_file()函数在获得webshell以及提权过程中起着十分重要的作用&#xff0c;常被用来读取各种配置文件 而load_file函数只有在满足两个条件的情况下才可以使用&#xff1a; 文件权限&#xff1a;chmod ax pathtofile 文件大小&#xff1a;必须…

DeepSeek-R1 论文解读 —— 强化学习大语言模型新时代来临?

近年来&#xff0c;人工智能&#xff08;AI&#xff09;领域发展迅猛&#xff0c;大语言模型&#xff08;LLMs&#xff09;为通用人工智能&#xff08;AGI&#xff09;的发展开辟了道路。OpenAI 的 o1 模型表现非凡&#xff0c;它引入的创新性推理时缩放技术显著提升了推理能力…

使用Pygame制作“贪吃蛇”游戏

贪吃蛇 是一款经典的休闲小游戏&#xff1a;玩家通过操控一条会不断变长的“蛇”在屏幕中移动&#xff0c;去吃随机出现的食物&#xff0c;同时要避免撞到墙壁或自己身体的其他部分。由于其逻辑相对简单&#xff0c;但可玩性和扩展性都不错&#xff0c;非常适合作为新手练习游戏…

海外问卷调查如何影响企业的经营?在品牌建设中有何指导意义?

市场调查的定义&#xff1a;通过科学的方法&#xff0c;有目的地、系统地搜集整理一些市场信息&#xff0c;其目的在于了解当下市场现状和发展前景&#xff0c;为企业生产和品牌打造提供一些科学的指导意见&#xff0c;这是任何大企业、中小企业、初创企业都必须重视的一个重要…

unity学习23:场景scene相关,场景信息,场景跳转

目录 1 默认场景和Assets里的场景 1.1 scene的作用 1.2 scene作为project的入口 1.3 默认场景 2 场景scene相关 2.1 创建scene 2.2 切换场景 2.3 build中的场景&#xff0c;在构建中包含的场景 &#xff08;否则会认为是失效的Scene&#xff09; 2.4 Scenes in Bui…

CPU 100% 出现系统中断 怎么解决

CPU 100% 出现系统中断 怎么解决 电脑开机时会掉帧&#xff0c;切换到桌面时就会卡顿&#xff0c;然后打开任务管理器就会看到系统中断的cpu占用率达到100%&#xff0c;过一段时间再打开还是会有显示100%的占用率&#xff0c;这个问题怎么解决&#xff1f; 文章目录 CPU 100% …

数据分析系列--⑥RapidMiner构建决策树(泰坦尼克号案例含数据)

一、资源下载 二、数据处理 1.导入数据 2.数据预处理 三、构建模型 1.构建决策树 2.划分训练集和测试集 3.应用模型 4.结果分析 一、资源下载 点击下载数据集 二、数据处理 1.导入数据 2.数据预处理 三、构建模型 1.构建决策树 虽然决策树已经构建,但对于大多数初学者或…

【MyDB】4-VersionManager 之 4-VM的实现

【MyDB】4-VersionManager 之 4-VM的实现 VM 的实现VM(VersionManager)的基本定义与实现优化具体功能实现begin()开启事务commit()提交事务abort 中止事务read 读取uid对应的数据记录所在的entryinsert方法&#xff0c;插入数据delete方法 VM 的实现 本章代码位于&#xff1a;t…

计算机网络 笔记 传输层

概述&#xff1a; 主要功能&#xff1a; TCP&#xff1a; 特点***&#xff1a; 数据格式&#xff1a; 连接管理***&#xff1a; 建立连接&#xff08;三次握手&#xff09; 释放连接&#xff08;四次挥手&#xff09; 应用场景 UDP&#xff1a; 特点&#xff1a; 数…

(leetcode 213 打家劫舍ii)

代码随想录&#xff1a; 将一个线性数组换成两个线性数组&#xff08;去掉头&#xff0c;去掉尾&#xff09; 分别求两个线性数组的最大值 最后求这两个数组的最大值 代码随想录视频 #include<iostream> #include<vector> #include<algorithm> //nums:2,…

《TCP 网络编程实战:开发流程、缓冲区原理、三次握手与四次挥手》

一、 TCP 网络应用程序开发流程 学习目标 能够知道TCP客户端程序的开发流程1. TCP 网络应用程序开发流程的介绍 TCP 网络应用程序开发分为: TCP 客户端程序开发TCP 服务端程序开发说明: 客户端程序是指运行在用户设备上的程序 服务端程序是指运行在服务器设备上的程序,专门…

把本地搭建的hexo博客部署到自己的服务器上

配置远程服务器的git 安装git 安装依赖工具包 yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel安装编译工具 yum install -y gcc perl-ExtUtils-MakeMaker package下载git&#xff0c;也可以去官网下载了传到服务器上 wget https://www.ke…

接口使用实例(1)

大家好&#xff0c;今天我们来看看接口的一些实例&#xff0c;关于如何定义和实现接口&#xff0c;相信通过这些例子&#xff0c;我们能有一些清晰的认知。 先定义一个学生类&#xff1a; 再给定一个学生数组&#xff0c;对这个对象数组中的元素进行排序&#xff08;按分数排&…

Git 版本控制:基础介绍与常用操作

目录 Git 的基本概念 Git 安装与配置 Git 常用命令与操作 1. 初始化本地仓库 2. 版本控制工作流程 3. 分支管理 4. 解决冲突 5. 回退和撤销 6. 查看提交日志 前言 在软件开发过程中&#xff0c;开发者常常需要在现有程序的基础上进行修改和扩展。但如果不加以管理&am…

跨境数据传输问题常见解决方式

在全球化经济的浪潮下&#xff0c;跨境数据传输已然成为企业日常运营的关键环节。随着数字贸易的蓬勃发展和跨国业务的持续扩张&#xff0c;企业在跨境数据处理方面遭遇了诸多棘手难题。那么&#xff0c;面对这些常见问题&#xff0c;企业该如何应对&#xff1f;镭速跨境数据传…

python-leetcode-删除链表的倒数第 N 个结点

19. 删除链表的倒数第 N 个结点 - 力扣&#xff08;LeetCode&#xff09; # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def removeNthFromEnd(self…

EasyExcel写入和读取多个sheet

最近在工作中&#xff0c;作者频频接触到Excel处理&#xff0c;因此也对EasyExcel进行了一定的研究和学习&#xff0c;也曾困扰过如何处理多个sheet&#xff0c;因此此处分享给大家&#xff0c;希望能有所帮助 目录 1.依赖 2. Excel类 3.处理Excel读取和写入多个sheet 4. 执…

lanqiaoOJ 2097:青蛙过河 ← 二分+前缀和+贪心

【题目来源】 https://www.lanqiao.cn/problems/2097/learning/ https://www.luogu.com.cn/problem/P8775 【题目描述】 小青蛙住在一条河边&#xff0c;它想到河对岸的学校去学习。小青蛙打算经过河里的石头跳到对岸。 备注&#xff1a;此图由百度 AI 创作生成 河里的石头排…