dingsir的个人博客分享 http://blog.sciencenet.cn/u/dingsir

博文

配方文本与配方数值 相互转换与合成的小工具

已有 2227 次阅读 2021-12-10 11:09 |个人分类:软件杂谈|系统分类:科研笔记

配方文本与配方数值 相互转换与合成的小工具

电解液的配方的管理是个很严谨的工作,除了做好保密工作之外,防止出差错也是非常重要的。如果在配方的传递或配方的管理中出现差错,样品生产或产品制造环节往往很难发现前面的这类差错,从而导致错误的放大,造成非常严重的损失。很多年前就碰到过这样一个案例,有位工艺工程师填写配方时,将VC和FEC的位置弄反了,后续的领导审核也没有发现这个问题,结果做出来的电解液含量检测时出现异常,倒查才发现问题所在,好在原料种类没错,还可以补救。因此,我一直觉得应该非常重视配方管理的严谨性,尽量减少人工的填写而改用直接的数据原格式传递,涉及配方变动更要万分小心全面检查,通过各种措施来预防出现这类差错。

这里分享一个配方的文本和配方数值进行转换的小工具,主要用来将数据表格形式的配方,合成为用文本表示的配方;另外,也可以将文本表示的配方,拆分为一个个数据项,用于准确无误的填写到数据表格中。是一个互逆操作的一对函数。

功能一:文本拆解到数值

先看看第一种情况,我们拿到一个配方,如何将它填写到表格中,表格的形式如下(配方是随便编的,与真实无关),涂黄色的区域表示这里的数据是用函数生成的。

配方文本→数据.png

如果没有这个工具,我们得根据文本的内容,一项一项的在表格中找到各个成分所在的列,再找到正确的行,千万不能弄错了,否则数据就填写到其它配方,或者是其它成分名下了。但这个过程即枯燥又很容易出错,特别是当成分如果有几十项的时候,这是一个非常考验耐心、消耗精力的活,出错了还不容易发现!

但如果使用本工具,只要简单的一拉(公式的设置要正确,特别是锁定行和锁定列的符号要正确),就好了。工具背后的代码会根据公式的参数,从指定的文本中查找出指定成分它的含量是多少,作为结果返回。如果找不到,则返回的结果为空串,单元格里什么也不显示。

=getcontent($O2,B$1)

提取含量的函数名为getcontent, 第一个参数为文本串,这里为$O2, O前面加$,表示在Excel中拉动单元格时,O不会变化,即指定了从O列读取,固定不动; 2表示为第2行,前面没有美元符,拉动时随着单元格的变化,它也随之变化。这是Excel中的小技巧,不难明白。如果你希望一个公式中参数固定为某个单元格,则应在行列之前都加上美元符,比如$O$2.  第二个参数为你要查找的原料是哪个,B$1指定的是B列的第一行,上面图表中的B$1格为LIPF6. 因为该例中名称都在第一行,所以行前面加了美元符以固定不变. 有一个特例,如果要解析名称,第二个参数应该指定为字符串"name",或者你把这一列的标题也设置成name。

为了方便拆解,配方的文本有格式要求:

配方名称[空格]配方文本

配方名称中不能出现%或逗号或冒号,配方名称与配方文本中的是空格符。

其中配方文本应该是归一为100%的,表达的方式,每一项都是以下两种方式之一

1) 名称:百分比,比如LiPF6:12.5%

2)百分比%名称,比如 12.5%LIPF6

各项之间用英文的逗号分隔,但文本的末尾不应用逗号。

如果你觉得有点抽象,可以看上面文本中的示例,那是符合要求的表达形式。

以上黄色区域的数据是函数生成的,因此如果你修改配方文本的表述,数值就会随之变动(你可以测试一下),也就是数据是依赖于文本的。如果文本无意中改动了(比如替换时无意中改错了)就会出现配方变动的情况,这样的数据形式我称之为“不够稳定的数据", 应该将它们以固定数值的方式存储更为保险。为此你可以将要固化的数值区域选中,复制,再原地不动,直接“粘贴为数值”,公式就消失了,变成了一项项数值。

注意一下,解析的数值是不包括百分号的,但配方文本中要求有百分号。

以上虽然描述起来话很多,但实际使用是非常简单的.

功能二:数值合成为文本

还有另外一种需求,当需要将数据表的某配方用文本形式传递给他人时(当然最好还是用Excel表格这种形式,但确实有些情况下这样做不方便或不允许),我们也可以将数据表中的配方,合成为一个文本。

配方数据→文本.png

上面图片中,左边为固定数值,右边黄色区域为生成的配方文本。

=生成配方文本($A15,B$14,M$14)

这个函数有三个参数,第一个为配方的名称, 第二个参数为首个原料名称,第三个参数是最末一个原料名称,用的都是它们所在的单元格.

这里其实有一个要求,各原料要求是集中在一块的,中间不能插入其它原料以外的文本列,不过一般配方表格的设计都是如此的.

往下一拉,函数自动组合 名称这一行所在的数据,形成一个文本.内部还对总和进行了一个检验,判断结果是不是100,这样以防止某些情况下以文本形式存贮的数字带来的数值失真.

源码开放,最后附上这个小工具供你测试.

链接:https://pan.baidu.com/s/1waArrGSRFx8jHD3IU_WbVQ  提取码:myap

最后提醒一下:

1)因为是EXCEL VBA写的函数,需要你的Excel安装了VBA模块,并且允许运行宏。

2)我公开了源码,你可以自由使用和分发,不排除源码有Bug,你可以自己修正或放弃使用,但相应的风险请各位自己判断和承担. 当然,作为配方管理表格,定期及时备份是常识,我就不多说了.

当然,如果你觉得有用或者需要帮助,告诉我一声,我的邮箱是dingsir@qq.com




https://blog.sciencenet.cn/blog-1213210-1315981.html

上一篇:消失的浊度---一种有趣的电解液现象的研究
下一篇:利用Ruby脚本扩展EditPlus的替换功能
收藏 IP: 210.13.108.*| 热度|

0

评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-23 05:46

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部