关于excel:esProc-利用剪贴板强化-Excel-计算

55次阅读

共计 2309 个字符,预计需要花费 6 分钟才能阅读完成。

遇到 Excel 难以实现的简单或非凡运算时,可先用剪贴板将数据复制到 esProc,利用 esProc 弱小的计算能力实现,这种形式比 add-ins 有更多长处,具体场景和代码解析请点击 esProc 利用剪贴板强化 Excel 计算

遇到 Excel 难以实现的简单或非凡运算时,可先用剪贴板将数据复制到 esProc,利用 esProc 弱小的计算能力实现,再用剪贴板返回 Excel。剪贴板形式比传统的 add-ins 形式部署更简略,操作更顺滑,开发时不影响剪贴板失常应用,且反对多个源片区和后果片区。

根本用法

esProc 提供了函数 clipboard,可实现剪贴板的根本用法。上面用“各科前 3 名的学生”为例进行阐明。

Excel 中解决前的数据如下,其中 A 列是学生姓名,B- D 列别离是数学、英语、物理问题。

计算指标:求出每学科问题前 3 名的学生,并追加到本科目问题之后。

这个计算指标须要用到记录汇合 TopN、按序号拼接等性能,Excel 自身不好实现,但借助 esProc 就容易多了。先在 Excel 中选中源片区(A1:D10),按下 ctrl+C,复制到零碎剪贴板,关上集算器 IDE,编写并执行如下脚本:

下面代码中,clipboard 函数有两种状态,其中无参数调用该函数时,可返回剪贴中的字符串,如 A1 格;以变量或格名为参数调用该函数时,可向剪贴板写入字符串,形如 A6 中的 clipboard(var)。

执行上述脚本后,在 Excel 的 B11 格用 ctrl+V,即可将剪切板中的数据复制到 B11-D13,如下:

随便编辑脚本

然而,咱们在编辑调试脚本时,保不齐会用一下复制粘贴,这时候就把剪贴板的内容冲掉了,再执行 clipboard() 时,返回的内容就是方才编辑的代码,这样就无奈实现计算了,只能再回到 Excel 去从新复制,有点麻烦。

针对这个问题,esProc 提供了 clipboard@e() 函数,选项 @e 示意始终返回第一次从 Excel 复制到剪贴板中的数据。上面让咱们试一下。

在“各科前 3 名的学生”这个例子中,假如咱们曾经从 Excel 复制了数据,并写完了脚本。此时编辑脚本,将 A3、A4 挪动到 B2、B3,再执行脚本时,就会因为 A1 中的 clipbaord() 取到谬误数据,而导致 A2 报错。当初批改代码,在 A1 应用方才提到的 clipboard@e(),则挪动代码后可正确执行。编辑后的代码如下:

多个后果片区

clipboard(…) 只能返回一个后果,但有些较简单的运算可能须要返回多个后果,这该怎么办呢?

其实,在 esProc 的结果显示区能够间接把多个格值(或变量值)别离复制到剪贴板,并顺次返回 Excel。

上面用“各科前 3 名和每个人的超过指标”为例进行阐明。

计算指标:在学生成绩单的根底上,不仅在各科目上面追加本科目前 3 名的学生,而且须要新加一列 target,计算出比自己总分略高的 3 名学生的名单列表,作为自己该当超过的指标。留神,有些人的超过指标有余 3 人,每个超过指标之间须用 > 号连贯。

先在 Excel 中选中源片区(A1:D10),按下 ctrl+C,复制到零碎剪贴板,关上 esProc IDE,编写并执行如下脚本:

上述代码中,A3 存储后果片区 1,即本科目前 3 名的学生;A4 存储后果片区 2,即每个人的超过指标。另外该当留神到,代码中毋庸 export() 和 clipboard(…)。

上面将计算结果返回 Excel。先点击片区 1,再点击右侧对应的“copy data”按钮,如下图:

在 Excel 的 B11 格用 ctrl+V,即可将片区 1 复制到 B11-D13,如下:

再点击脚本中的片区 2,按住 shift 的同时,点击右侧对应的“copy data”按钮,之后在 Excel 的的 E1 格按下 ctrl+V,即可将片区 2 连带列名复制到 E1:E10。如下所示:

在上述操作中,咱们可通过 shift 管制计算结果是否带列名,这是 esProc 的独有形式,其余计算工具不具备此项性能。

多个源片区

解决了多指标的问题后,咱们很容易联想到有多个源的问题。计算可能须要应用 Excel 的多个源片区,但 clipboard 只能放弃最新复制的那一片,这又该怎么办?

有方法,能够把剪贴板内容间接简单到格子外面去。

上面用“查问合乎指定条件的订单”为例进行阐明。

Excel 中有两个 sheet,订单明细和员工名单,其中订单明细如下:

员工名单如下:

计算指标:查问出最近 days 天内或订单属于部门列表 depts 的数据,须要的列有订单编号、日期、金额、销售员名字、部门名称。其中 days 是内部参数,每次执行时都能够输出不同的值,比方输出 30 示意查问 30 天内的订单;depts 也是内部参数,比方 [“Markeding”,”Finance”]。这个计算指标波及动静查问和多键值查问,Excel 自身不好实现,但借助 esProc 就容易多了。

首先,在 Excel 中选定片区“订单明细”,连带列名一起复制粘贴到 esProc 脚本的 A1 单元格;同样地,将片区“员工名单”复制到 esProc 脚本的 A1 单元格。如下图:

留神,肯定要进入 A1 格的编辑状态能力进行复制,不然会把剪贴板的内容填进一大片格子,后果可能变成这样:

这就不好了,占有区域太大,会影响代码布局。

如果操作正确,A1/A2 分外观上只出现很小一部分数据,点击后才会出现残缺数据,这是网格局代码的独特之处,适宜在不影响浏览和代码布局的状况下复制大片数据。

复制完两个源片区后,持续编写脚本,期间可屡次运行脚本,可手工操作剪贴板。最初代码如下:

实现计算后,可用“copy data”按钮将 A5 中的计算结果拷贝回 Excel。有一点须要留神,保留代码时该当把 A1/A2 格的数据革除掉,否则这些大片数据也会被一起保存起来了。

正文完
 0