刚进入一个新东家,总免不了会接到一些“脏活”、“累活”,比如笔者就是如此(能力不够、能力不够、能力不够 [滑稽])
前不久,同事B凭长期tian某位小leader的关系成功将一项需要手动编码800多条字符串的任务转到笔者身上,虽然很愤怒,但又不能怼回去。只能无奈的接下。
后来评估了一下,如果纯手工操作,按照1min一条计算(先编码,再拷贝到原字库文件适当位置),并且整个操作过程不出错,至少得要800多分钟,加之还需验证,怎么也得需要两个工作日的时间。这种做法笔者内心是拒绝的,好歹也是个叠过轮子造过车的大大滴良民。
说来也巧,编码字符使用的工具,笔者在此之前就在CSDN看到过。所以再次找到了位置所在,细看发现作者把源码也无偿分享到网上了,那后面笔者所要做的……咳咳,不废话了!
原作者资源路径:https://blog.csdn.net/qq446252221/article/details/53188278
笔者二次开发后:https://download.csdn.net/download/jiqiren_dasheng/12668021
目录
6.关于VisualStudio2017某些版本以后在类向导中没有“TypeLib中的MFC类”
笔者二次开发后的版本,支持从Excel中连续读取若干字符(串)进行编码,今后维护字库对应的表格即可,具体介绍如下:
1.界面差异
新版本在一级对话框添加了Excel控件,并设计了Excel对应的二级对话框。
将部分默认选项修改为常用项(主要是便于笔者使用)。
界面风格基本保持原生态。
2.新增EXCEL自定义码表功能使用介绍
模式一:按照Excel固定格式编码(未选中“自定义行列”)
特点:
①固定从Excel第2行第6列开始编码(前面5列格式中标题加红的编码过程需要使用)。
②可以根据识别到的图片、文本类型自动分类编码(图片类型编码后固定用三个十六进制,具体见下④)。
③文本类型可自定义语言第一列(即Excel第6列)是否按宋体编码,其它列采用一级对话框设定的字体。
④生成的字库文件格式如上图4:第一列是表格第一列的索引值。然后就是各语言对应字符(串)编码后的十六进制格式,各语言用分号间隔,使用字库时可以此作为解析判别依据。相较原作者版本的差异,一是将同一字符串的多个字符编码后连接在一起,二是编码后在每种语言开始位置增加了若干个十六进制字段,便于后期使用字库时分析,解释如下:
第一个十六进制:0x00 → 文本,0x01 → 图片。
若是图片类型:接下来只有两个十六进制,分别存放图片名称(限四位的纯数字,一万张图想必够用了)。转换规则:图片名为0025.bmp,则转换为“0x00,0x25”。图片名为6981.bmp,则转换为“0x69,0x81”。(目前图片只支持bmp和jpg,其它类型需要自行修改代码)
若是文本类型:接下来有四个十六进制,分别是编码源字符(串)高度值高字节、字符(串)高度值低字节、字符(串)宽度值高字节、字符(串)宽度值低字节。(在一级对话框设定的点阵高度、宽度是针对单个字符)
注意:
①Excel前五列的格式不能修改。
②结束判断:换行后第一个单元格识别为空单元格。
③暂不支持保存文件为BIN文件。
模式二:自定义起始、终止行列(选中“自定义行列”)
特点:
①从自定义的起始行列开始编码。
②每行以连续检测到10个空单元格为换行标志。
③生成文件格式如上图7。第一列是每行对应于Excel中哪行。然后就是各语言对应字符(串)编码后的十六进制格式,各语言用分号间隔。添加的字段同模式一特点④。
注意:
①字体格式统一采用一级对话框设定的格式。
②不能识别图片、文本类型,统一按文本编码。
③结束行列不一定是设定的终止行列,可能提前终止。 (因为换行后检测到空单元格即结束)
④暂不支持保存文件为BIN文件。
3.异常提示弹窗
编码过程如果遇到异常提示弹窗,大多数都附带有Excel行列,核对一下是否是下图所圈记的情况(两种模式合在一起,注意区分)。
上图圈记说明如下:
Excel第2行:类型设定为文本,但语言第一列是否使用宋体未设置,不会终止编码,但会有弹框提示将按照工具一级对话框设定的字体进行编码。(如果类型设定为图片,第5列值无效)
Excel第3行:类型未设定,先弹窗提示位置,然后终止编码。
Excel第4行:会提示读取内容异常,尤其提示检查是否有空格。(代码中是以内容、长度两个维度判断)
Excel第5、11、13行:会提示设定的语言数量与实际检测到不一致。第11行情形在Excel自定义编码模式会准确提示在Excel哪个单元格前存在空单元格。
Excel第6行:图片名称(含后缀)读取异常,具体根据提示即可明了。若是第6行第9列缺少情形,不会终止编码,但有弹框提示。(在Excel自定义模式,肯定不会出现这样的提示滴~~~)
Excel第9行。这种情况会终止编码,但不会有异常提示。正常的提示结束于哪一行哪一列,所以每次编码完成注意核对Excel的结束行列。
4.代码优化
代码中笔者加了很多注释,原作者没加类成员的注释笔者基本都补上了,本身代码结构又不复杂,很容易入手,欢迎继续优化。
①代码中临时设置宋体,是通过测试出的宋体对应的序号进行操作,暂不知是否有正规的操作方法?欢迎评论区留言~~~
②点击下图右上角的 “×”,不能达到点击右下角 “取消” 的效果。主要是笔者暂不知如何重写点击右上角的 “×” 的响应行为。
③原作者版本,保存字库选择文本文件时所对应的格式(按字符分开显示,每行十六个),由于笔者暂未想到合适的兼容手段,本版本注释了相关接口,在此向作者说声:抱歉!
④编码Excel,工具预览窗口会变,这个后期可以优化一下。
⑤忘了。。。
5.代码架构
6.关于VisualStudio2017某些版本以后在类向导中没有“TypeLib中的MFC类”
这个......笔者用的更新的VS2019,把基本与MFC相关的组件都装上后,发现还是没有。实际上有这样的描述:
所以笔者最终是安装了一个VS2013版本,才将与Excel相关的类添加进去。
如果博友们有已解决方法,欢迎评论区分享分享。
7.声明
如果你喜欢“高谈阔论”,请绕行!说到这,笔者又想讲个故事:在笔者二次开发完这个工具后,在一次会上分享如何使用时,一位同事P首先说你这表格格式要求太多了,然后又说你这个思路不对,太复杂了,直接比较表格根据差异重新生成差异项不就行了……呵呵,说话粗疏之人,笔者向来都是不想搭理。况且这个工具优化工作,原本就是此人的。笔者翻了一下“历史”,笔者入职当月中旬,此人就把这个优化工作提出来了,然而三个月过去了,仍没见任何进展。用笔者与其他同事茶余饭后戏言:优先级不够、优先级不够、优先级不够 [滑稽]
如果你说只需要修改Excel中某几个字符,这个工具每次都是全部重新生成字库,会不会影响以前已生成的字库,那请你把beyond compare工具用起来吧。机器出错的概率,以及人出错的概率,笔者更相信机器。况且表格第一次做好后,后面只剩下维护工作。
工具具体怎么用,得看客官~~~
郑重提示:①对文中描述不清之处,可以评论区留言,笔者看到后会第一时间回复!
②转载注明出处,就是对笔者最大的支持!