基于Excel vba绘制地质柱状图的实现

发表时间:2020/10/26   来源:《基层建设》2020年第18期   作者:胡涛
[导读] 摘要:一般认为,绘制柱状图是专业软件的事,其实我们天天用的excel也能实现。
        新疆建筑设计研究院有限公司
        摘要:一般认为,绘制柱状图是专业软件的事,其实我们天天用的excel也能实现。而且结合其本身强大的数据处理能力,能够完成专业软件不能完成的事情。
        关键词:excel;地质柱状图
        1 前言
        笔者从事工程地基基础检测行业,根据规范要求,检测报告里要绘制桩位附近地层柱状图。而绘制这种专业的图形,一般都选择专业软件,比如理正、华宁等,这些软件主要针对的还是勘察专业,对于检测专业来说,就稍显复杂,而且有些格式也没有针对性。由于没有一款专业的小型绘图工具,这就导致很多员工在用其它软件绘制再修改,浪费大量时间,很多单位索性在检测报告里就不出现地质柱状图。对于一份完整的报告而言,这不得不说是一个小小的缺憾。目前,笔者通过对Excel的研究发现,其有些功能可以很好的满足地质柱状图的绘制,再加上VBA的二次开发,完全可以编出一个适合自己专业习惯的工具。
        2 地质柱状图的构成及难点
        基于规范要求的柱状图要求绘制出基桩临近钻孔的地层,我们可以根据基本要求添加丰富的内容,比如表头、地层信息、柱状图列。表头里包含桩号、桩长、桩顶标高、钻孔号及层底标高等信息,地层信息包含岩土名称及相关描述等。绘制工具编制的难点在于:
        2.1 地层的厚度要按照比例尺体现在单元格高度上,并与柱状图上的地层比例一一对应,若厚度过小,就要在保证行高能显示字体的情况下添加引线,引线的起点坐标也要经过计算方能适应比例。
        2.2 柱状图的绘制,这是重中之重的地方。核心是根据层厚的数值在Excel中添加图表→二维柱状图→百分比堆积柱状图。
        2.3 绘图坐标的换算,Excel中各单元格其实都有自己的坐标,它是以磅值为单位进行定位的,换算关系为1磅=0.03527cm。要想绘制出来的图形和表格按比例尺显示,掌握这个换算技巧必不可少。
        如下图1所示,笔者用VBA编制的自动成图工具,只需输入岩土名称、层底标高及桩长就可以自动完成的桩及桩周土柱状图。
 
        图1  桩及桩周土地质柱状图
        3 地质柱状图工具的绘制
        绘制工具的编制顺序:绘制地质图例→绘制表格→调整行高(磅值)→添加引线→绘制柱状图(添加图例)
        3.1绘制地质图例。把常用的地质图例命名成土层名,并做成无边框形,大小在125×85像素值即可,方便后期引用。
        3.2绘制表格及引线。把两行表头设计好,行高和列宽固定成最终样式。在需要添加引线的位置预留一列,能够完整显示引线所占位置,最后一列为柱状图列,宽度要能满足完整清晰的显示地层图例。行数先设置成3-5行,用于输入基础数据,后期根据输入层数的多少自动绘制所有地层行及行高。
        ‘定义行高类型为single,假设需要绘制10cm高的柱状图。
        Dim RwHeight as single
        RwHeight=每层层底深度/末层层底深度/0.03527*10
        ’假设表中最小字号为11,行高最小可设置为12。行1为首地层。
        If 行1高>12 then 行1高=RwHeight
        If 行2高<12 then 行2高=行2RwHeight+首行.top-行2.top
        ’实际行高若小于设定值12,实际位置就会下移,触发引线产生。
        ’引线起点坐标为(x,y),x值和终点坐标容易确定,现把行2-Y值写出:
        行2-Y值=扣除下移高度后的实际值=行2RwHeight+首行.top
        ’上述自动设置行高和引线的方法放置在最大值为地层序号的循环里,可以达到自动设置每层行高的目的。
        3.3 绘制柱状图。添加百分比堆积柱状图,其属性Left和Top及Width为所在单元格的参数,Height为调整行高时设置的10cm/0.03527,这样就保证了总行高与柱状图高度处于同一个比例。而后添加每一系列的数据源为每地层的厚度,最后再设置柱状图的填充背景为地质图例,注意填充方式为层叠。
        ’添加百分比堆积柱状图
        ActiveSheet.Shapes.AddChart2(297,xlColumnStacked100,左上宽高)
        ’系列类型,每行作为一个系列
        ActiveChart.SetSourceData Source:=数据源,PlotBy:=xlRows
        ’给每一系列赋值,放置在以层数为最大值的循环里
        ActiveChart.FullSeriesCollection(首系列).Values = 末行层厚。
        '柱空隙间距调整为0
        ActiveChart.ChartGroups(1).GapWidth = 0
        ‘添加相应路径的图例,填充方式为层叠。
        ActiveChart.FullSeriesCollection(首).Points(1).Format.Fill.UserPicture
        ActiveChart.FullSeriesCollection(首).Points(1).PictureType = xlStack
        钻孔地质柱状图的核心代码已叙述完毕,我们可在柱状图之上用相同方法再添加一个堆积图,用于按比例绘制桩身。再用添加图片的方法将绘有“桩”字的图片添加到桩身中部位置。至此,一个完整的具有行业针对性的地质柱状图工具编制完成。
        4 结语
        基于Excel vba开发钻孔柱状图的方法不多见,可能是担心比例精度的问题,其实Single类型的数据可保留到小数点后6位,本例中也就是1.000000磅的精度,足够我们作为辅助工具使用了。
        Excel具有强大的数据处理能力,在统计分析方面独树一帜。笔者在成功编写出上述小工具后,又将其和折线图联合,编写了重型动力触探成图工具,达到了统计分析图文并茂的效果。
        在使用Excel vba绘制地质柱状图及重型动力触探工具以后,不仅轻松的解决了自动化的问题,而且非常方便的将输入的地层信息及数据快速输出成模板式地质柱状图表,使试验成果系统化、规范化。该工具的开发与应用作为一种新的尝试,为批量整理数据,快速生成地质柱状成果提供了非常便利的工具。Excel本身是一款再普通不过的办公软件,但是在此平台可以实现其它很多专业性工具开发与利用,从而更好的配合传统的专业软件。
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: