有些 Excel 或工程量软件里的数据并不是连续区域,没法直接用 Excel 公式一次求和。素材里的“累计求和”工具提供了一个很实用的思路:每次复制当前选中内容,把数字追加到一个悬浮计算框里,并自动计算总和。
这种工具适合处理零散数据、间断行、跨软件复制出来的数值。它不是替代 Excel 公式,而是补足“人工挑选多个位置再汇总”的场景。
一、最小思路:复制选中内容并累加
#Requires AutoHotkey v1.1
#NoEnv
#SingleInstance Force
SendMode, Input
sum := 0
F1::
Clipboard := ""
SendInput, ^c
ClipWait, 1
if ErrorLevel
return
value := RegExReplace(Clipboard, "[^0-9.\-]")
if (value = "")
return
sum += value
ToolTip, 当前累计:%sum%
return
F2::
sum := 0
ToolTip, 已清零
return
这是最小版本:复制、提取数字、累加、显示结果。实际使用时,还需要处理多行多列、公式表达式、中文括号、备注文本等情况。
二、为什么要备份剪贴板
前台工具经常会用 Ctrl+C,但直接覆盖剪贴板会影响用户。更稳的写法是先备份,再复制,处理完恢复。
ClipSaved := ClipboardAll
Clipboard := ""
SendInput, ^c
ClipWait, 1
if ErrorLevel
{
Clipboard := ClipSaved
ClipSaved := ""
return
}
text := Clipboard
Clipboard := ClipSaved
ClipSaved := ""
如果工具使用频率很高,这个细节会明显改善体验。
三、多个数字可以拼成表达式
素材脚本的高级点在于:它不是简单累加一个数,而是把复制到的多行数据拼成表达式,再计算。这样可以保留用户看到的计算过程。
expr := ""
items := StrSplit(text, [A_Tab, Chr(10), Chr(13)])
for index, raw in items
{
v := Trim(raw)
if (v = "")
continue
v := RegExReplace(v, "[^0-9.+\-*/()]")
if (v != "")
expr .= expr ? "+" v : v
}
MsgBox, % "表达式:" expr
如果要允许乘除、括号和小数,就要比单纯提取数字更谨慎。中文括号、中文句号、备注里的数字都可能干扰计算。
四、悬浮窗口比 MsgBox 更适合长期使用
累计求和工具通常会在 Excel 或其他软件前台反复使用,MsgBox 会打断操作。更好的体验是做一个置顶小 GUI,显示表达式和结果。
Gui, +AlwaysOnTop +ToolWindow
Gui, Font, s11
Gui, Add, Edit, w260 h180 vExpr
Gui, Show, NA, 累计求和
return
UpdateExpr(text) {
GuiControl,, Expr, %text%
}
长期工具尽量不要频繁弹窗,用 ToolTip、GUI、状态栏会更顺手。
五、实战注意事项
- 复制前清空剪贴板,并使用
ClipWait。 - 处理完成后恢复用户剪贴板。
- 对中文括号、中文句号、备注内容做清洗。
- 不要直接执行来源不明的表达式,至少限制允许字符。
- 针对特定软件可以用
#IfWinActive限制热键范围。
结语
累计求和工具的价值在于贴近前台工作流:用户看到哪里,就复制哪里;脚本负责把零散数据汇总起来。它特别适合工程量、报价、清单核算等场景,也能帮助新手理解 AHK 如何把剪贴板、GUI 和数据处理结合起来。
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)