基于EXCEL VBA的参数一致性方面的研究
2018-10-19周顾庭张春单晓明
周顾庭 张春 单晓明
摘要:本文对FADEC系统软件的参数一致性进行了研究。通过分析现有参数处理方式,本文提出将输入文档中的表格作为唯一的来源,利用EXCEL/VBA提取文档中的表格数据,写入代码或可调参数文件中。通过该种方法能够保证代码中数据与要求一致,同时保证可调参数的初始值与代码中的默认值一致。
关键词:FADEC;参数;一致性;word;Excel
1引言
在FADEC软件开发过程中,一般需要将文档中的大量的数据写入软件代码中,有些数据仅在代码中体现,有的数据需要设置为可调参数,可调参数一般调节规律、控制参数、标定曲线等系统匹配曲线[1],如何高效且准确的保证所使用参数与要求参数一致性及其可维护性是在软件开发过程中亟需解决的问题,而VBA(Visual Basic for Application)是一种由Visual Basic的一种宏语言[2][3],主要用于扩展Windows的应用程序功能,特别是Microsoft Office软件,本文提出了基于EXCEL的VBA进行处理的方法。
2问题分析及设计思路
按照软件开发流程,在新研阶段就应该考虑全面,规定统一的软件架构,制定文档中数据编写的规则:可调还是不可调,连续还是离散点,可调的格式,数据的名称等,做成可调参数的形式等,确保数据的来源唯一且准确,然后将需求文档中的需要写入代码中的数据按照制定好的格式编写,前期要做好规则制定及数据的分类整理等大部分策划工作,保证需求文档中的数据是代码及可调参数相关文件的来源,以此来保证数据的正确性。这个在前期的进行合理的规划后,能够保持数据源的一致性,后续维护中也按照规则执行。
而一旦未规定好统一的框架结构进行处理,进入维护阶段后,若大量的变更数据表格,则应该参考新研阶段,统一规划结构,制定规则后,统一按规则执行,若是仅有少量变更,则可以统计一下文档中表格的类型,然后进行相应的处理。
本文基于EXCEL/VBA开发工具,能够读取输入文件中的参数曲线,参考现有维护阶段代码及可调参数暂定义一种代码及可调参数格式,生成可直接使用的代码及可调参数文件,同时,也可以对现有的参数进行校对。参数曲线分为一维、二维和三维,已分别有对应表格区分曲线,同时写明检测范围,处理流程如下:
输入:word文件(包含固定格式的默认参数曲线及其检测表格)
输出:代码(包括默认值及检测范围)及可调整参数文件
处理点:读取word中表格到excel中,区分表格的类型,留下表格中的数值(删除其单位等非数值信息),输出到文件中。
3用VBA开发数据生成工具的实例
3.1 输入输出说明
以三种表各有一张为例,输入输出如以下格式所示:
1)输入数据表格,包括一维表格、二维表格以及三维表格,必要元素包括表号和表格内容,用于默认值的生成格式如图2、图3和图4所示。
2)检测范围信息表格,必要元素包括上下限,对应表号,以及名称等,格式要固定,在输入文档中有明确的说明,格式如图5、图6及图7所示:
3)输出分默认值,检测范围和可调参数三种格式,原有分别有三个文件用于对比校验;
4)Sheet1为默认处理数据的工作表。
3.2实现说明
实现界面如图8、图9及图10所示:
实现步骤如下:
1)打开word:打开待处理word,路径和名称可手动更改,默认是相同路径下的TEST.docx文件,同时创建默认值.c、检测范围.c及flash.flashconfig三个文件,删除默认4個工作表之外的表;
2)数据提取:
a)记录word中表名称,获取表格目录,并将其拷贝到表格目录工作表中;
b)将表格拷贝到与表号相同的工作表中,如没有则创建,有则删除,同时建立表格目录中表名到表格工作表的链接;
c)判断是一维、二维还是三维曲线,分别从相应的工作表中读取上下限及曲线名称,调用相应函数进行处理;
3)数据比较:对已有维护项目,将生成的文件与已有的文件调用beyondcompare软件进行对比,对结果进行验证;
4)关闭word:都处理完毕后选择是否关闭打开的输入文件。
3.3关键处理说明
3.3.1将word表格拷贝到excel的工作表中
Sheets.Add(After:=Sheets(Sheets.Count)).Name = sheetname(j)‘增加工作表
Sheets(sheetname(j)).Activate
.Tables(j).Range.Copy‘复制word表
ActiveSheet.Cells(1,1).Select
ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
False, NoHTMLFormatting:=True‘粘贴word表
3.3.2写入文件
创建和写入文件有以下两种,用open和用文件系统,open对应的close关闭才算写入完成,本文选择filesystemobject来创建和写入文本。
a)用open
Bn = 要创建的文件完整路径
Open Bn For Output As #4
Print #4, data;
Close #4
b) 用文件系统
Dim fso As New FileSystemObject
Setfso = CreateObject("Scripting.FileSystemObject")
Bn =要创建的文件完整路径
Set f = fso.OpenTextFile(Bn, 2, True)
f.Write data
3.3.3取word表格中数字
1)利用正则表达式[5],编写函数去掉字符串中的指定类型的类,如去掉汉字、去掉数字及去掉字符等,所写函数如下:
Function exReplace(str As String, repstr As String, pat As String)
2)exReplace(word, "", "\D"),去掉word中的除数字外的其他内容,写函数将word中区分负数符号“-”及小数点“.”,利用取位置位操作再拼一起,所写函数如下:
Function GetNumber(word As String)
3.3.4读取不同维度数据
根据输入模板可知,主要针对X轴、Y轴及Z轴数据分了多行,因此要查找分了多少行,倒序查找分了多少行,将所有的数据取全,记录X轴、Y轴、Z轴的数据个数与数值,根据指定格式输出到相应的文件中。
3.4 实现结果
建立TEST.docx,内有一维表[4161]、二维表[1426]和三维表[4177],同时相应的表的检测也在excel对应工作表中。
生成结果,word每个表格都讀取到excel中,如图11所示。
生成的文件如图12所示。
将生成文件与原有比较,结果如图13、图14及图15所示,经比较发现,不同之处是名称及其他描述信息不同,数值不同之处是在flashconfig中,有个0.33和0.325的不同,经分析,原文件中经excel处理时小数位被约掉了,工具生成的文件数据正确,本工具在用excel处理数据时以文本的形式而不是数字的形式,以避免数据有误。
4 结束语
本文开发了一种在FADEC软件开发过程中从word中获取表格数据并直接生成代码和可调整参数的工具。通过实现结果表明,该工具可用于在软件新研开发阶段直接生成代码及维护阶段的参数的维护,可以避免手动输入数据可能发生的错误,同时提高开发效率。
参考文献:
[1]武晔卿.嵌入式系统可靠性设计技术及案例解析[M].北京:北京航空航天大学出版社,2012.7.
[2]John Walkenbach. Excel 2010 power programming with VBA [M]. Wiley publishing,Inc.,Indianapolis,Indiana,2010.
[3]Bill Jelen,TracySyrstad.VBAandMacros:Microsoft excel 2010[M].Que Corporation,U.S.,2010
[4]Excel Home.别怕,Excel VBA其实很简单[M].北京:北京大学出版社,2016.7.
[5]侯秀红,董峰.Visual Basic 6.0中正则表达式的应用[J].郑州轻工业学院学报,2005,20(4),38-41.