word域和书签结合,实现类似手动vlookup功能

news/2025/2/12 13:14:52/文章来源:https://www.cnblogs.com/hyaray/p/18711391

效果

实现整个文档,根据数字批量生成大写金额的功能,如

首付款金额(¥1000元)
尾款金额(¥2000元)

一键转成

首付款金额壹仟元整(¥1000元)
尾款金额贰仟元整(¥2000元)

思路

  1. word插入Excel表,借Excel公式生成大写金额,参考数字自动转换为中文大写金额,效果可以,后来不知道什么原因出现Excel表出错,就放弃了
  2. 书签+域的方式,也有两种
  3. 域代码类似类似REF zhifu1 \* chinesenum2,问题是的显示文字是,可能无法更改,所以也放弃了
  4. 还是书签+域的方式,用脚本更新域的值,和书签的对应关系,用域的代码匹配

步骤

  1. 所有数字的区域,转成书签(多处同理)
  2. 选中数字
  3. 插入→书签→输入名称如zhifu1→点击添加
  4. 大写金额处插入域:按Ctrl-F9并输入对应的书签名称如zhifu1,这样域和书签就可以关联起来。
  5. 运行ahk代码
ad := ComObjActive("Word.application").ActiveDocument
;获取所有书签和值
objBM := map()
loop(ad.Bookmarks.count) {bm := ad.Bookmarks.item(A_Index)objBM[bm.name] := bm.range.text
}
;遍历域
loop(ad.fields.count) {f := ad.fields.item(A_Index)code := trim(f.code.text)if (objBM.has(code)) ;找到匹配的书签f.result.text := toAmount(number(objBM[code])) ;显示大写值
};数字转大写金额
;作者:sikongshan
;更新日期:2022年09月14日
;限制:因为不涉及到大数值计算,可以到20位或者更高,但是中文转回阿拉伯的时候,超过17位数值则会有问题(受限于ahk计算),下次考虑拼接方式避免
toAmount(num) {sNum := string(num)arrNum := StrSplit(sNum,".")if (strlen(arrNum[1])>17) ;设定20位,return sNumres:=""objNum := {0:"零",1:"壹",2:"贰",3:"叁",4:"肆",5:"伍",6:"陆",7:"柒",8:"捌",9:"玖"}objDanwu := {1:"元",2:"拾",3:"佰",4:"仟",5:"万",6:"拾",7:"佰",8:"仟",9:"亿",10:"拾",11:"佰",12:"仟",13:"兆",14:"拾",15:"佰",16:"仟",17:"万",18:"拾",19:"佰",20:"仟"}objDicimal := {1:"角",2:"分",3:"毫",4:"厘"};整数部分loop(strlen(arrNum[1]))res := objNum[substr(arrNum[1], -A_Index, 1)] . objDanwu[A_Index] . resloop 3 {res:=RegExReplace(res,"零(拾|佰|仟)","零")res:=RegExReplace(res,"零{1,3}","零")res:=RegExReplace(res,"零(?=(兆|亿|万|元))","")res:=RegExReplace(res,"亿零万","亿")res:=RegExReplace(res,"兆零亿","兆")};小数部分if(arrNum.length > 1) {DP := arrNum[2]res .= "零"loop parse, DP {A_LoopFieldif(A_Index>5)breakif(A_LoopField=0)continueres .= format("{1}{2}", objNum[A_LoopField],objDicimal[A_Index])}} else {res .= "整"}return res
}

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

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

相关文章

C#/.NET/.NET Core技术前沿周刊 | 第 25 期(2025年2.1-2.9)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等…

Windows系统端口被占用解决方案

在 Windows 系统中,如果某个端口被占用,可能会导致应用程序无法正常启动或连接。以下是一些解决方案,可以帮助你查找和解决端口被占用的问题查找占用端口的进程打开命令提示符按 Win + R,输入 cmd,然后按 Enter查找占用端口的进程netstat -ano | findstr :"端口号&qu…

智能化员工工作状态管理:AI视频监控在大型商场的技术方案介绍(part4)

为提升商场或企业的运营效率,商家需要通过AI对员工的行为进行实时监测,不仅能提升运营效率,还能优化资源配置、加强安全管控、提高员工工作表现,从而推动企业持续、健康的发展。 具体需求包括 1、离岗监测:识别员工是否擅自离开工作岗位。 2、工作服及胸卡佩戴:检测员工是…

立体系统(Stereo Systems)总结

上一讲中我们介绍了对极几何的相关知识,在这一讲开头我们先回顾一下平行图像平面的对极几何。 平行图像平面的对极几何(Parallel image planes)在这种情况下,对应点的极线是水平的,光心连线与图像平面的交点(极点)在无穷远处,并且在这种平行配置下,同一个三维点在两个…

DeepSeek AI 满血版功能集成到WPS或Microsoft Office中

DeepSeek AI集成到 WPS或Microsoft Office中, 由于deepseek被攻击或者非常繁忙导致超时的服务器,所以可以用硅基流动部署的DeepSeek 。当然用官网的也可以。使用 OfficeAI 插件集成(wps为例): 下载并安装 OfficeAI 插件:从可靠的软件下载平台https://www.office-ai.cn/,获…

第二章:计算机的构成

复习第一章:需要一台计算机,在研究其组成的方向上进行努力TL;DR计算机由四大核心部分组成:输入设备、输出设备、存储器和运算器 计算机内部采用二进制表示所有信息,包括数字、文字和指令等等 冯诺依曼体系结构是现代计算机的基础框架正文在了解了计算机的诞生历史后,我们来…

第一课 泰坦尼克号预测

目录导入数据将训练数据与测试数据合并查看数据描述性统计查看是否有异常值查看特征与标签之间的关系查看标签是否有偏态数据预处理填充缺失值特征工程特征创造同组识别筛选子集建模 导入数据 将训练数据与测试数据合并 查看数据 描述性统计查看是否有异常值看看各个数据是否偏…

美团面试:手机扫描PC二维码登录,底层原理和完整流程是什么?

本文原文链接 文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 …

docker官网镜像无法下载问题解决

亲测可用,这个方法是由技术爬爬虾大佬提供,简单地说就是通过github上的docker_image_pusher项目,将国外docker镜像转存到阿里云私人仓库。 此方法需要你有一个github账号,有一个阿里云账号。注册方法这里就不赘述了。 1.1. 获取阿里云相关参数 登录阿里云容器镜像服务。地…

Uptime-kuba安装与使用

Github https://github.com/louislam/uptime-kuma环境查看 系统环境# cat /etc/redhat-release Rocky Linux release 9.3 (Blue Onyx) # uname -a Linux Rocky9Uptimekume003077 5.14.0-362.18.1.el9_3.0.1.x86_64 #1 SMP PREEMPT_DYNAMIC Sun Feb 11 13:49:23 UTC 2024 x86_6…

一文读懂本地部署DeepSeek-R1,如何选择

一文读懂本地部署DeepSeek-R1,如何选择! 想在本地服务器部署DeepSeek-R1?那可得先搞清楚不同版本的硬件需求。DeepSeek-R1是个超厉害的语言模型,有好几个版本,每个版本对计算资源和硬件的要求都不一样。这篇文章能帮你了解各版本的参数、所需硬件,以及怎么根据自身需求选…