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

博文

Excel学习经历

已有 2835 次阅读 2020-3-13 01:26 |个人分类:软件杂谈|系统分类:教学心得| Excel, 学习经历, VBA, Python, xlwings, Excel

以前读大学的时候,计算机还比较昂贵,我们这种穷学生还买不起。毕业论文老师要求我们打印出来,当时我想把自己的论文输入到电脑,借了同学的电脑来试试,由于不会盲打,不会五笔,我平均1分钟才打出来一个字。同学实在看不过眼,接过手来啪啪了一阵,速度是我的至少20倍。太受刺激了,感觉自己真的好无能!

后来上研究生了,决心买一台电脑来练练,经过一番努力,买了电脑,我学会了“中文之星”输入法,学会了Word的应用(我从DOS学到Windows3.1到Windows95),经过练习,我成为了Word的高手,连那时候很难使用的域、自动图文集,也用得有模有样了。

Word我研究得比较多,感觉自己没有什么好学的了,后来就想把精力投入到Excel上来。但用来用去没有感觉到Excel有什么好的,就放下了。其实,那个时候,我还没有入门,完全不知道它的强大之处,纯粹的一只菜鸟。

为了学习Excel技巧,我经常去Excelhome论坛逛,学到了很多实用的技巧.论坛上有个非常长但非常有趣的贴子,讨论了很多菜鸟的做法,也有很多高手的做法,十分精彩,建议大家有空逛逛.(http://club.excelhome.net/thread-281323-1-1.html)

Excel其实是一个非常强大的工具,但是它的界面比较简单,很容易让不熟悉的人低估了它的能力。由于它的设计思路与我们的直觉也有一定的差异,因此如果没有熟悉它的思维,学起来就比较累.比方说,Office中普遍的一个思路就是,选中你要处理的对象(文本、段落、单元格区、图形等),再执行你的操作。而不是反过来(格式刷这类除外),这与我们日常的经验是相反的。Excel是近乎无限的表格(远超一般用途所需),删除行或列之后会自动补齐到最大行数或最大列数,没有使用的表格不会打印出来;而Word中的表格则是所见所得,这两者几乎完全是两回事,熟悉了Word之后再来学Excel,往往这些地方会不适应。

我特别记得一位领导说过,ATL公司的同事编写了一些Macro,可以快速提高电池测试数据的分析效率。因此我特别重视对Macro的研究,从Word的录制宏开始学习,最早买的一本这方面的书就是讲Word97中的宏的使用,到后来一步一步发展到VBA的学习。也曾经VBA写过一些简单的提升分析效率的小工具,甚至后来还用Delphi写了一个小工具,通过模拟鼠标点击和向控件发送消息来操控新威的软件,实现自动导出数据为Excel表格 ^_^

参加工作几年之后,我碰到了一个课题,我管辖的部门有个同事在用一个程序计算电解液的配方,根据输入的质量百分比或体积百分比、锂盐浓度来计算出来最后的质量百分比。程序使用起来比较麻烦,要在命令行一个一个输入,敲回车计算结果,再用笔记录下来结果。我了解了一下,发现是一个QBASIC编写的程序,在DOS模式下执行,计算出来结果,再输入EXCEL编制下料的用量表格,相当麻烦且容易出错。我就想,既然Excel中集成了Visual Basic,Visual Baisc与QBasic语法上可能相通,能不能把这个代码转移到EXCEL中来,利用VBA进行计算呢? 从这个需求出发,我买了几本Excel编程的书开始自学(我是化学专业,自学过一点Delphi编程,但VBA编程完全是外行),终于大约1个月的努力,终于把这个代码移植到了VBA上。Excel VBA中接触最多的就是处理单元格,因此Range对象十分重要,它的方法和属性也相当丰富,把Range对象掌握熟练之后,感觉50~60%的Excel功能编程都掌握了! 我设计的方案是利用Excel上指定的表格,输入数据在Excel指定位置,再点击一下按钮,就自动能够计算出归一化的配方,再点击一个按钮,VBA代码就在另一个表单(worksheet)上指定位置写入待打印的下料单数据,配合设计好的表格模板,直接打印就可以了。原来一个配方从头到尾可能要十几分钟的计算,后来2秒钟就搞定了。我把这个程序发给同事使用,他们很快就用上手,帮我们节省了大量的时间。

当时的配方管理也是填写在Excel表格中,由于缺少系统设计,各种配方存放在多个数据表中,甚至有几位同事各自拥有自己的配方数据,整体上数据非常混乱,同名不同配方的时有发生。为了查询方便而且统一标准,我又自学了Access,设计了一个包括配方管理、客户信息管理的Access数据库,用ADO连接做为数据访问的工具。配方分解为不同成分含量和规格,存放在表格里,通过ADODB连接读取到Excel中来。反过来,也可以在Excel中设计新的配方或修改配方,再回写到Access数据库。我花了大约2个月不到的时间,收集和整理了所有的配方文件,将它统一至一个数据库中来,同时把配方编码的责任收拢到一个人身上,统一归并在配方数据库上。在Excel中查询配方一键搞定,编好的配方也是一键存入到Access数据库。使用起来相当方便,当时这个成果让美国派的老板也很是高兴了一下。

再后来,发现其实Excel也可以当成Access来用的,只要正确的配置ADODB连接,于是,我再次消灭了Access数据库,用另一个独立的Excel文件来代替Access,这样电脑上不装Access也可以用了。

就这样,在这个不断开发不断更新的版本上,实现了很多好用的功能,如配方归一,体积转质量比,名称与代码互相转化,化学物料的信息查询(CAS,SMILES,单价),生产用量计算,电解液再调配的计算,配方文本的解析,配方转化为文本描述,含有特定物料的配方查询,多组分联合查询,甚至是数据库未含有的物料使用特定代理来登记,利用JSON文本实现代理信息存储与解析等等,越来越复杂,但同时也越来越顺手,即使手头有数以千计的配方,管理起来也十分简单。通过这个不断学习与练习的过程,我的Excel应用水平也得到了飞速的提升。从原来只会用现成的公式或函数,到后来也能根据自己的需要编写一些自定义的函数来解决问题,感觉学习过程中自己受益众多。

Excel中用VBA编程,我最怕就是由于某个原因,程序突然崩溃了,这可能会损坏不少代码。这个事情在我手头发生过好几次,好在经常备份,损坏往往不大,花点时间可以再编写补救。但确实给我留下了一些不好的影响。如果Excel编程环境能够更健壮一点就好了。

由于以往的经历,我发现学习最快的方法就是面对一个问题需要解决,在这个解决过程中针对性的学习。最近在学习Python时,我就想使用Python来实现一下以前做过的配方文本解析,于是花了一些时间来研究。由于找对了Python IDE(我选择了Wing IDE),Python的调试与使用都变得容易上手了,花了一点精力就把这个重写好了.Python确实是利器,字典操作,列表切片用起来十分爽利,语法又极其简洁,大大简化了编程的压力,wing  ide 调试也很方便,让我爱不释手. Python与PowerShell有很多类似的地方,但Python的各种库的支持要好得多,意味着更好的扩展能力.原来我还打算深入的研究一下Powershell,有了Python之后,感觉也不必了。

 如果Excel能够支持Python的话,Python丰富的库可以增强Excel的功能,基于这种考虑,很快我就找到了支持Python编程的的工具xlwings,虽然只到0.18版,但用起来毫不含糊。借助于xw的威力,我把基于VBA的代码移植到了Python上,VBA只是简单的对Python代码进行包装,在Excel中使用起来也十分方便,代码不稳定导致崩溃的问题也基本上消失了,主要代码都在Py文件,不容易出问题. 同时,也尝试了把Excel格式的数据库,迁移到SQLite数据库,也比较容易就实现了。最近又研究了一下Git,把Python版本控制放在Git中,以后版本的管理就更方便了。

以前刚学习Delphi的时候,怀着“要瘦身,学编程”的精神一头扎进了这个世界,林林总总的先后接触过Delphi、VBA、汇编、C++、PowerShell、Perl、matlab、C#、SQL、XML、正则表达式、JSON等各种乱七八糟的东西,也不知熬过了多少个不眠之夜,除了掌握一点知识,写了一点工具外,思维上和习惯上的提升也在潜移默化之中,程序的逻辑性、分析的周密性、整理的习惯、及时记录变化等等都是看得见的好处,个人认为还算对得起这份付出。

边学边玩,边学边用,不亦乐乎! 是为记。




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

上一篇:漫谈DTD的几种结构类似物
下一篇:自定义EXCEL过程:体积比转换为质量比
收藏 IP: 60.191.31.*| 热度|

1 马德义

该博文允许注册用户评论 请点击登录 评论 (2 个评论)

数据加载中...

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

GMT+8, 2024-4-25 08:09

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部