宏_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 灵犀

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

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

相关文章

ServletOutputStream failed to write: Broken pipe

案发现场 问题&#xff1a; org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to write: Broken pipe org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream …

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测&#xff08;Matlab完整源码和数据&#xff09; 目录 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测&#xff08;Matlab完整源码和数据&#xff09;预测效果基本介绍 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测一…

14-6-2C++STL的list

(一&#xff09;list对象的带参数构造 1.list&#xff08;elem);//构造函数将n个elem拷贝给本身 #include <iostream> #include <list> using namespace std; int main() { list<int> lst(3,7); list<int>::iterator it; for(itlst.begi…

[b01lers2020]Life on Mars1

打开题目页面如下 看了旁边的链接&#xff0c;也没有什么注入点&#xff0c;是正常的科普 利用burp suite抓包&#xff0c;发现传参 访问一下 http://5edaec92-dd87-4fec-b0e3-501ff24d3650.node5.buuoj.cn:81/query?searchtharsis_rise 接下来进行sql注入 方法一&#xf…

Linux的udev详解、安装和使用(dev下的设备每次开机的名称不固定怎么办?)

前言&#xff08;问题与需求&#xff09;&#xff1a; 在传统的devfs 1&#xff1a;设备映射的不确定&#xff1a;一个设备多次加载设备的设备文件可能不同&#xff0c;比如一个hub有可能是ttyUSB0或ttyUSB2或ttyUSB3 2&#xff1a;devfs没有足够的主辅设备号&#xff0c;当设…

Linux 内核中的 InfiniBand 核心模块:drivers/infiniband/core/device.c 分析

InfiniBand 是一种高性能、低延迟的网络互连技术,广泛应用于高性能计算(HPC)、数据中心和云计算等领域。Linux 内核中的 InfiniBand 子系统提供了对 InfiniBand 设备的支持,而 drivers/infiniband/core/device.c 文件则是 InfiniBand 核心模块的重要组成部分。本文将对 dev…

如何快速开发LabVIEW项目,成为LabVIEW开发的高手

发现了一篇多年前写的文章&#xff0c;转发到这里 如何快速开发LabVIEW项目&#xff0c;成为LabVIEW开发的高手。 如果您手里有LabVIEW项目&#xff0c;领导催的又很紧&#xff0c;该怎么办&#xff1f; 如果您公司规模小&#xff0c;就想把LabVIEW项目快速搞定&#xff0c;有什…

CodeForces 611:New Year and Domino ← 二维前缀和

【题目来源】 https://codeforces.com/contest/611/problem/C 【题目描述】 They say "years are like dominoes, tumbling one after the other". But would a year fit into a grid? I dont think so. Limak is a little polar bear who loves to play. He has r…

K8S中的数据存储之基本存储

基本存储类型 EmptyDir 描述&#xff1a;当 Pod 被调度到节点上时&#xff0c;Kubernetes 会为 Pod 创建一个空目录&#xff0c;所有在该 Pod 中的容器都可以访问这个目录。特点&#xff1a; 生命周期与 Pod 绑定&#xff0c;Pod 删除时&#xff0c;数据也会丢失。适用于临时…

如何移植ftp服务器到arm板子?

很多厂家提供的sdk&#xff0c;一般都不自带ftp服务器功能&#xff0c; 需要要发人员自己移植ftp服务器程序。 本文手把手教大家如何移植ftp server到arm板子。 环境 sdk&#xff1a;复旦微 Buildroot 2018.02.31. 解压 $ mkdir ~/vsftpd $ cp vsftpd-3.0.2.tar.gz ~/vs…

Alfresco Content Services docker自动化部署操作

Alfresco Content Services docker部署文档 前提条件 在开始之前&#xff0c;需要确保已经安装了 Docker 和 Docker Compose。Docker 用于创建和管理容器&#xff0c;Docker Compose 则用于定义和运行多容器的 Docker 应用。 步骤 1. 创建目录结构 首先&#xff0c;创建一个…

计算机网络 (61)移动IP

前言 移动IP&#xff08;Mobile IP&#xff09;是由Internet工程任务小组&#xff08;Internet Engineering Task Force&#xff0c;IETF&#xff09;提出的一个协议&#xff0c;旨在解决移动设备在不同网络间切换时的通信问题&#xff0c;确保移动设备可以在离开原有网络或子网…

嵌入式MCU面试笔记2

目录 串口通信 概论 原理 配置 HAL库代码 1. 初始化函数 2. 数据发送和接收函数 3. 中断和DMA函数 4. 中断服务函数 串口通信 概论 我们知道&#xff0c;通信桥接了两个设备之间的交流。一个经典的例子就是使用串口通信交换上位机和单片机之间的数据。 比较常见的串…

Charles 4.6.7 浏览器网络调试指南:流量过滤与分析(六)

1. 概述 在网络调试和优化过程中&#xff0c;Charles 不仅可以实现简单的网络抓包操作&#xff0c;还支持更高级的抓包技巧和流量分析功能。这些功能能够帮助开发者深入挖掘网络请求的细节&#xff0c;为复杂问题提供有效的解决方案。本文将重点讲解 Charles 的过滤规则、自定…

xss靶场

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

主机监控软件WGCLOUD使用指南 - 如何设置主题背景色

WGCLOUD运维监控系统&#xff0c;从v3.5.7版本开始支持设置不同的主题背景色&#xff0c;如下 更多主题查看说明 如何设置主题背景色 - WGCLOUD

C语言:数据的存储

本文重点&#xff1a; 1. 数据类型详细介绍 2. 整形在内存中的存储&#xff1a;原码、反码、补码 3. 大小端字节序介绍及判断 4. 浮点型在内存中的存储解析 数据类型结构的介绍&#xff1a; 类型的基本归类&#xff1a; 整型家族 浮点家族 构造类型&#xff1a; 指针类型&…

51单片机入门_01_单片机(MCU)概述(使用STC89C52芯片;使用到的硬件及课程安排)

文章目录 1. 什么是单片机1.1 微型计算机的组成1.2 微型计算机的应用形态1.3 单板微型计算机1.4 单片机(MCU)1.4.1 单片机内部结构1.4.2 单片机应用系统的组成 1.5 80C51单片机系列1.5.1 STC公司的51单片机1.5.1 STC公司单片机的命名规则 2. 单片机的特点及应用领域2.1 单片机的…

使用 OpenCV 和 Python 轻松实现人脸检测

目录 一、准备工作 二、加载人脸检测模型 三、读取图像并进行人脸检测 四、处理视频中的人脸检测 五、优化人脸检测效果 六、总结 在人工智能和计算机视觉领域,人脸检测是一项非常基础且重要的技术。通过人脸检测,我们可以在图像或视频中识别并定位人脸,进而进行后续的…

Qt 控件与布局管理

1. Qt 控件的父子继承关系 在 Qt 中&#xff0c;继承自 QWidget 的类&#xff0c;通常会在构造函数中接收一个 parent 参数。 这个参数用于指定当前空间的父控件&#xff0c;从而建立控件间的父子关系。 当一个控件被设置为另一控件的子控件时&#xff0c;它会自动成为该父控…