【VC++开源代码栏目提醒】:网学会员在VC++开源代码频道为大家收集整理了“Excel内嵌VBA和COM代码在测量计算中的应用 - 讲义教程“提供大家参考,希望对大家有所帮助!
浙江林学院学报 2008251:83-87JournalofZhejiangForestryCollege收稿日期:2007201210修回日期:2007207202基金项目:浙江省自然科学基金资助项目Y305261浙江林学院科研发展基金资助项目2351000635作者简介:陈永刚讲师硕士从事GISGPS和测量工程的应用研究。
E2mail:cyg_gis163.comExcel内嵌VBA和COM
代码在测量计算中的应用陈永刚施拥军汤孟平徐文兵浙江林学院环境科技学院浙江临安311300摘要:为了能够解决测量平差计算烦琐复杂和人工编写Cass展点文件容易出错的问题提出一种在Excel中嵌入VBA和COM
代码的方法来简化测量平差计算且可以自动生成Cass展点文件。
首先使用
VC中ATL模板开发角度转换和Cass展点COM模块其次在Excel中利用VBA
代码调用COM模块来实现平差计算和展点文件的自动生成。
在浙江林学院数字植物园的1∶500大比例尺基础地形图测绘
工作中利用该方法快速准确地进行了25个点的闭合测量导线平差计算和近112万个展点文件的自动生成计算结果均准确无误。
该方法可使测量导线平差计算和Cass展点文件生成变得简单方便高效。
图5参15关键词:工程测量测量平差格式转换VBA
代码COM模块Excel应用中图分类号:TB22S771文献标志码:A文章编号:10002569220080120083205MeasurementsandcalculationswithembeddedVBAandCOMcodesinExcelCHENYong2gangSHIYong2junTANGMeng2pingXUWen2bingSchoolofEnvironmentalTechnologyZhejiangForestryCollegeLin’an311300ZhejiangChinaAbstract:Theaimistosimplifycalculationsofmeasurementadjustmentandcreatepoints’filesincomputerassistedsearchserviceCASSautomatically.InthisstudyvisualbasicforapplicationsVBAandcomponentobjectmodelCOMcodeswereembeddedintoMicrosoftExcel.CalculationsofadjustedmeasurementsweresimplifiedandpointfilesinCASSwereautomaticallycreated.WiththismethodfirstCOMmoduleswithangleconvertsandCASSpointsusinganactivetemplatelibraryATLtemplatefromVCweredeveloped.ThenCOMmoduleswereusedwithVBAcodeinExcelsothatmeasurementadjustmentswerecalculatedandpointfileswereautomaticallycreated.Thismethodwasusedfortopographicmeasurementsfrom1∶500large2scalemapsinthedigitalbotanicalgardenofZhejiangForestryCollegewith25pointsbeingrapidlycalculatedbyadjustmentofaclosedtraverse.Resultsrevealednearly12000pointfilesthatwerecreatedautomaticallyandaccurately.Withthismethodcomplexcalculatin
gprocedureswerenotnecessaryunlikebeforewhenmanuallyperformedandwhencreatingthepointfiles
mistakeswererarelymade.Thisstudyshowedthatadjustedcalculationsofaclosedtraverseandautomaticcreationofpointfileswasrelativelyeasy.Ch5fig.15ref.Key
words:engineeringsurveysurveyadjustmentformattransformationvisualbasicforapplicationsVBAcomponentobjectmodelCOMmoduleExcelapplication浙江林学院东湖校区是校园与植物园一体化的现代校园有多个植物园区和上百种珍稀濒危植物植物种类繁多且地形地貌复杂。
为了满足建设数字校园和各部门规划管理的需要对东湖校区进行1∶500大比例尺地形图测绘以提供各项规划和建设所需基础数据。
利用建设时期曾遗留下2个控制点布设了一条具有25个点的闭合导线并以此为基础进行了全面详细的测绘测量点位众多?? 1994-2011 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net计算庞大。
文章详细介绍了利用Excel内嵌VBA和COM
代码来解决上述
问题的解决办法。
1 技术背景Excel是微软公司Office系列办公软件中的一个应用程序。
Excel提供直观快捷的数据输入强大灵活的数据处理丰富多样的图表制作完善快捷的报表
设计快速完备的统计分析功能。
Excel重要的应用就是利用公式进行计算只要在一个单元格中输入公式就能得到结果。
有丰富的三角函数计算公式用户可以输入一个公式通过拖动的方式实现大批量数据的一次性处理1-3。
在微软的Office系列软件中都提供了
VBAvisualbasicapplication简称VBA宏语言VBA是Basic语言的一个变种用它来编程非常简单且高效。
宏语言程序编译通过以后将
程序保存在Excel中的一个模块里并通过菜单“工具”宏的操作启动这个“模块”来调用VBA宏应用程序从而实现相应的功能。
利用VBA可以摆脱Excel不够灵活的限制根据自己的需要进行各种灵活的定制4。
COM是Windows操作
系统的基本软件模型。
组件技术是近年发展起来的一种优秀的软件重用技术。
组件开发的原理完全类似搭积木的原理采用模块组合和
软件重用的思想。
组件是具有某种特定功能的软件模块。
COM是一个二进制标准不是一个开发语言如常用的VBVC等都可以用来开发COM。
ATL是开发COM组件的一个工具框架使用ATL可以减少开发COM的时间。
使用ATL开发COM可以不必很详细地了解COM底层就可以开发出短小高效的COM组件5-8。
2 技术实现211 导线坐标平差计算过程如下:在Excel中填好要计算数据的各项内容的表头如图1所示。
图1 Excel测量计算表单Figure1 MeasurementandcalculationformsinExcel在第1列A列为点号序列按顺序点号排列。
点1为A01点2为A02以此为序观测角是导线测量记录的右角值。
数据格式为小数点前是角度值小数点后4位是分和秒值。
如第4行B列11912216为119°22′16〃。
因为在平差时要用到三角函数计算三角函数计算仅支持弧度的形式的角度值所以度、分、秒格式的数据要转换为弧度值才可以参与计算。
如D列为B列角度对应的弧度值。
从度、分、秒格式的数据要转换为弧度值要经过度、分、秒转换为以度为单位的角度以度为单位的角度要转换为以弧度为单位的角度。
下面的C
代码实现了从度、分、秒格式的数据要转换到以度为单位的角值。
在
VC中新建ATL项目命名为ZJPingCha。
添加ATL简单对象DegMSToDeg并为其添加方法doItIt
代码如下。
STDMETHODIMPCDegMSToDeg::doItItDOUBLEinValDOUBLE3outVal//度分秒到度的转换doubledblDegdblMindblSecdblDegfloorinVal//degreedblMinfloorinVal2dblDeg3100100//MinutedoubletmpSecinVal3100//seconddblSectmpSec2floortmpSec31003outValdblDegdblMin/60dblSec/3600//resultreturnS_OK48浙江林学院学报 2008年2月 ?? 1994-2011 China A
cademic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net2012-05-182012-05-182012-05-182012-05-182012-05-182012-05-18图2 Excel中VBA使用COM组件Figure2 VBAusesCOMinExcel以上
代码功能就是将度分秒格式的角度转换为以度为单位的角度。
如将119°22′16〃转换为°。
在
VC中构建ATL工程生产ZJPingCha.dllCOM组件。
在Excel中按组合键ALTF11。
出现VBA编辑器。
通过菜单“工具”点击“引用”菜单项加入ZJPingCha.dll组件。
如图2所示。
此时ATL组件ZJPingCha就插入到了Excel中。
在VBA编辑器中编写如下
代码实现度分秒格式到度的批量转换。
代码如下:PublicSubDMS_To_DDimiAsIntegerDimdblDegAsDoubleDimcalAsNewZJPingCha.CDegMSToDeg’CCOMtoolsFori4To27’i为行标号dblDegcal.doItItCellsi2’从4到27行Cellsi3dblDeg’将转换后的角度值写入Excel表格中NextMsgBox“度分秒到度转换完备”EndSub图3 Excel中执行宏调用COM组件Figure3 CallingfunctionofCOMinExcel在Excel中点击“工具”菜单“宏”菜单项二级菜单项“宏”打开“宏”对话框。
如图3所示。
点选Sheet1.DMS_To_D宏按“执行”按钮弹出“度分秒到度转换完备”对话框。
然后利用Excel的radians函数将度转换到弧度。
在Excel的D4表格输入公式“radiansc4”然后采用拖动的方式将所有的C列角度值转换为弧度为单位的角度。
利用求和功能求出所有的左角之和α。
所有的左角之和理论上是βn2×180。
但由于测量误差存在角度闭合差fα-β≠0因而角度改正数为δα-β/n。
在E列输入公式d4δ。
然后采用拖动的方式将的E列所有的角度进行闭合差改正。
Δxscosσ。
用同样的方式求出各边的方位角并对其进行改正。
根据各边方位角和各条边长依据公式Δxscosσ和Δyssinσ推算各个导线点相对于上一导线点的坐标增量Δx与Δy。
在L4和N4单元格输入如下公式k4cosj4和k4sinj4采用拖动的方式可以计算出每一个导线点的坐标增量。
根据闭合导线理论上∑Δx0与∑Δy0进行坐标增量改正9-13。
结果如图4。
依据改正后的Δx和Δy就可以计算出各个导线点的坐标值。
到此平差计算完成。
212 自动生成Cass展点文件在本项目中绘图软件用的是南方公司的Cass制图软件。
此软件既有CAD方便易用的特点又有测绘中
常用的图标图例完全可以满足测量制图的要求。
但Cass的展点文件需要手工编写过程比较繁琐而且容易出错和丢失数据。
58 第25卷第1期陈永刚等:Excel内嵌VBA和COM
代码在测量计算中的应用 ?? 1994-2011 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net2012-05-182012-05-182012-05-182012-05-182012-05-182012-05-18图4 在表格中进行改正计算Figure4 Formforthecalculationofcorrection在
VC开发工具中开发生成Cass展点文件的COM模块ExcelToFile.CToCass。
下面为COM模块的源
代码文件。
作用是使用ISOC的标准文件流向硬盘中写入Cass展点文件数据14-16。
STDMETHODIMPCToCass::toTxtFileBSTRstrInusing namespace stdCString strExlstrInLPTSTRlpszLPTSTRLPCTSTRstrExlfstream ostream“c:myCass.dat”ios::outios::app//输出流ostream