前些时日,接了一个win32com
的商业项目,工期预计两周,硬是被我干成了三周。于今天终于交付,那就做个复盘吧。
一个桌面程序,用来为毕业论文快速设置格式,以提高生产效率。该程序可为不同学校配置不同的格式模板,一篇论文包含以下的模块:
也许某些学校还会有别的要求,。
涉及到的格式设置有:
论文各个模块对各种格式几乎都有要求。
1、能为不同学校选择不同的论文模块,各个模块可以单独设置必要的格式,并保存为模板;
分析:使用一个面板,展示所有的模板,需要哪个就勾选哪个,该模块的具体格式配置可以通过按钮来唤起子界面进行设置,配置文件保存为json
即可。
2、能搜索模板,修改模板;
分析:使用输入框搜索json文件,并加载内容到面板中,子界面的内容则可以保存在内存中,待需要时再渲染到模块格式的界面中
3、批量上传文件,批量设置,以提高效率;
分析:简简单单,上传文件后,文件路径保存到内容中,开始设置格式时传到其他界面去即可
4、能自行设置文件处理后的保存路径;
分析:这个没什么好分析的
5、能自定义同时处理文件的数量(并发设置);
使用该数值去开启多进程
,当然,给个默认值最好,8g内存电脑,默认数值为4
6、文件的处理进度要展现在面板上。
要队列通信才能搞定了,每个文件的处理状态都需要掌握
1、必须得使用win32com
,而且需要使用DispatchEx
调度器,配合pythoncom
可实现并发。如果使用Dispatch
是无法实现并发的,因为这个调度器会接管本地任何一个已经在运行的WPS
或office word
客户端,这样就没得玩了;
2、GUI
使用PyQt
,要熟悉它的信号机制
和多进程
的用法;
3、PyQt
和win32com
使用不同的进程,win32com
是耗时任务,需要使用队列通信,把文件处理的进度同步给PyQt
,win32com
内部的多进程也需要同步文件处理的进度,假如上传了100个文件,每次处理10个,每当有一个文档处理完毕,就及时补充一个进程,多开一个客户端来跑;
4、使用pyinstaller
打包时,需要multiprocessing.freeze_support()
的支持,防止软件启动时会无限开启子线程导致电脑卡死。
由于论文对格式的要求很多,很多时间都花在了对论文的处理逻辑上,虽然win32com
的商业项目也做了几个了,但每次都感觉很陌生,经验的理解来自于客户,所以一直赶不上客户的需求,每次做win32com
项目都有种重头再来的感觉。
其实客户去年就找我做过一版,但当时对他们的业务理解太浅,win32com
的接口也不熟悉,导致软件执行效率不高。
1、经过一年左右对win32com
的接触,有很多现成的方法可以替代原来自己实现的方法,执行效率提升了上去;
2、后端业务逻辑的切割,把文档的处理切割成了数个模块,每个模块之间相互依赖。
(1)比如,有专门处理模板的数据模块,它来负责把模板的数据加工成各种结构,以提高在项目中的通用性;
(2)又如,有专门负责实现格式调整的模板,只负责生产最小单位的格式调整方法,且还有专门的模块生产接口,把格式调整的方法组织成接口以供使用,让功能和接口分离,提高编程效率;除此以外,还有文件读写的模块,负责写入、读取各种json
文件等等。
这个软件要想达到完美的状态,时间成本非常大,首先要做的就得把许许多多学校的论文模板综合分析一次,把所有的细枝末叶都考虑进来,提炼出一个最为合理的架构,才有可能实现得了。不过,我感觉这个项目客户很快又要迭代了。
我拉了一个win32com
的交流群,入群请加微信 yideng6618,备注交流群