宏_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(); //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 灵犀

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第一届“启航杯”网络安全挑战赛WP

misc PvzHE 去这个文件夹 有一张图片 QHCTF{300cef31-68d9-4b72-b49d-a7802da481a5} QHCTF For Year 2025 攻防世界有一样的 080714212829302316092230 对应Q 以此类推 QHCTF{FUN} 请找出拍摄地所在位置 柳城 顺丰 forensics win01 这个软件 云沙盒分析一下 md5 ad4…

GESP2024年3月认证C++六级( 第三部分编程题(2)好斗的牛)

参考程序&#xff08;暴力枚举&#xff09; #include <iostream> #include <vector> #include <algorithm> using namespace std; int N; vector<int> a, b; int ans 1e9; int main() {cin >> N;a.resize(N);b.resize(N);for (int i 0; i &l…

QFramework实现原理 一 :日志篇

作为一款轻量级开源的Unity程序框架&#xff0c;QFramework结合了作者凉鞋多年的开发经验&#xff0c;是比较值得想要学习框架的初学者窥探一二的对象&#xff0c;我就尝试结合凉鞋大大给出的文档和ai&#xff0c;解析一下其背后的代码逻辑&#xff0c;以作提升自己的一次试炼 …

图论汇总1

1.图论理论基础 图的基本概念 二维坐标中&#xff0c;两点可以连成线&#xff0c;多个点连成的线就构成了图。 当然图也可以就一个节点&#xff0c;甚至没有节点&#xff08;空图&#xff09; 图的种类 整体上一般分为 有向图 和 无向图。 有向图是指 图中边是有方向的&a…

_CLASSDEF在C++中的用法详解及示例

_CLASSDEF在C++中的用法详解及示例 _CLASSDEF的定义与使用示例说明代码解析总结在C++编程中,宏(Macro)是一种预处理指令,它允许程序员在编译之前对代码进行文本替换。_CLASSDEF是一个自定义的宏,它提供了一种便捷的方式来定义类及其相关类型。本文将详细介绍_CLASSDEF在C+…

华为数据之道-读书笔记

内容简介 关键字 数字化生产 已经成为普遍的商业模式&#xff0c;其本质是以数据为处理对象&#xff0c;以ICT平台为生产工具&#xff0c;以软件为载体&#xff0c;以服务为目的的生产过程。 信息与通信技术平台&#xff08;Information and Communication Technology Platf…

从CRUD到高级功能:EF Core在.NET Core中全面应用(四)

初识表达式树 表达式树&#xff1a;是一种可以描述代码结构的数据结构&#xff0c;它由一个节点组成&#xff0c;节点表示代码中的操作、方法调用或条件表达式等&#xff0c;它将代码中的表达式转换成一个树形结构&#xff0c;每个节点代表了代码中的操作例如&#xff0c;如果…

系统思考—问题分析

很多中小企业都在面对转型的难题&#xff1a;市场变化快&#xff0c;资源有限&#xff0c;团队协作不畅……这些问题似乎总是困扰着我们。就像最近和一位企业主交流时&#xff0c;他提到&#xff1a;“我们团队每天都很忙&#xff0c;但效率始终没见提升&#xff0c;感觉像是在…

MySQL 的索引类型【图文并茂】

基本分类 文本生成MindMap:https://app.pollyoyo.com/planttext <style> mindmapDiagram {node {BackgroundColor yellow}:depth(0) {BackGroundColor SkyBlue}:depth(1) {BackGroundColor lightGreen} } </style> * MySQL 索引** 数据结构角度 *** B树索引*** 哈…

华硕笔记本装win10哪个版本好用分析_华硕笔记本装win10专业版图文教程

华硕笔记本装win10哪个版本好用&#xff1f;华硕笔记本还是建议安装win10专业版。Win分为多个版本&#xff0c;其中家庭版&#xff08;Home&#xff09;和专业版&#xff08;Pro&#xff09;是用户选择最多的两个版本。win10专业版在功能以及安全性方面有着明显的优势&#xff…

【深度学习】 自动微分

自动微分 正如上节所说&#xff0c;求导是几乎所有深度学习优化算法的关键步骤。 虽然求导的计算很简单&#xff0c;只需要一些基本的微积分。 但对于复杂的模型&#xff0c;手工进行更新是一件很痛苦的事情&#xff08;而且经常容易出错&#xff09;。 深度学习框架通过自动…

虚幻浏览器插件 UE与JS通信

温馨提示&#xff1a;本节内容需要结合插件Content下的2_Communication和Resources下的sample.html 一起阅读。 1. UE调用JS 1.1 JS脚本实现 该部分共两步: 导入jstote.js脚本实现响应函数并保存到 ue.interface 中 jsfunc 通过json对象传递参数&#xff0c;仅支持函数名小…

CDN、源站与边缘网络

什么是“源站” 源服务器 源服务器的目的是处理和响应来自互联网客户端的传入请求。源服务器的概念通常与边缘服务器或缓存服务器的概念结合使用。源服务器的核心是一台运行一个或多个程序的计算机&#xff0c;这些程序旨在侦听和处理传入的客户端请求。源服务器可以承担为网…

数据库、数据仓库、数据湖有什么不同

数据库、数据仓库和数据湖是三种不同的数据存储和管理技术&#xff0c;它们在用途、设计目标、数据处理方式以及适用场景上存在显著差异。以下将从多个角度详细说明它们之间的区别&#xff1a; 1. 数据结构与存储方式 数据库&#xff1a; 数据库主要用于存储结构化的数据&…

Java Swing 基础组件详解 [论文投稿-第四届智能系统、通信与计算机网络]

大会官网&#xff1a;www.icisccn.net Java Swing 是一个功能强大的 GUI 工具包&#xff0c;提供了丰富的组件库用于构建跨平台的桌面应用程序。本文将详细讲解 Swing 的基础组件&#xff0c;包括其作用、使用方法以及示例代码&#xff0c;帮助你快速掌握 Swing 的核心知识。 一…

Mac m1,m2,m3芯片使用nvm安装node14报错

使用nvm安装了node 12/16/18都没有问题&#xff0c;到14就报错了。第一次看到这个报错有点懵&#xff0c;查询资料发现是Mac芯片的问题。 Issue上提供了两个方案&#xff1a; 1、为了在arm64的Mac上安装node 14&#xff0c;需要使用Rosseta&#xff0c;可以通过以下命令安装 …

多模态论文笔记——ViViT

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细解读多模态论文《ViViT: A Video Vision Transformer》&#xff0c;2021由google 提出用于视频处理的视觉 Transformer 模型&#xff0c;在视频多模态领域有…

网络安全 | F5-Attack Signatures-Set详解

关注&#xff1a;CodingTechWork 创建和分配攻击签名集 可以通过两种方式创建攻击签名集&#xff1a;使用过滤器或手动选择要包含的签名。  基于过滤器的签名集仅基于在签名过滤器中定义的标准。基于过滤器的签名集的优点在于&#xff0c;可以专注于定义用户感兴趣的攻击签名…

【C语言系列】深入理解指针(4)

深入理解指针&#xff08;4&#xff09; 一、回调函数是什么&#xff1f;二、qsort使用举例2.1使用qsort函数排序整型数据2.2使用qsort排序结构数据 三、qsort函数的模拟实现四、总结 一、回调函数是什么&#xff1f; 回调函数就是一个通过函数指针调用的函数。 如果你把函数的…

零售业革命:改变行业的顶级物联网用例

mpro5 产品负责人Ruby Whipp表示&#xff0c;技术进步持续重塑零售业&#xff0c;其中物联网&#xff08;IoT&#xff09;正引领这一变革潮流。 研究表明&#xff0c;零售商们正在采用物联网解决方案&#xff0c;以提升运营效率并改善顾客体验。这些技术能够监控运营的各个方面…