测绘工作中AutoCAD与Excel数据交换方法

发表时间:2021/7/22   来源:《城镇建设》2021年9期   作者:杨先恩
[导读] 在测绘工作中,大部分文字成果数据是以Excel形式存在的,
        杨先恩  
        文山蔚鑫地矿工程勘察有限公司,云南  文山  663099

        摘  要: 在测绘工作中,大部分文字成果数据是以Excel形式存在的,图形成果数据是以AutoCAD形式存在的,因而数据交换不可避免。本文主要对测绘工作中AutoCAD与Excel数据交换的一些常用方法进行了讨论。

        关键词:AutoCAD  Excel  数据交换  DXF格式  CSV格式
 
1引  言
        在测绘工作中,大部分文字成果数据是以Excel形式存在的,图形成果数据是以AutoCAD形式存在的,因而数据交换不可避免。要做到AutoCAD与Excel之间的数据交换,必须对它们各在的数据格式进行了解,才能掌握其数据交换的一些方法。
2AutoCAD数据格式
2.1  AutoCAD数据输出格式
在测绘工作中,AutoCAD数据输出格式主要为DWG和DXF文件,其中DXF文件是一般的文本格式,常规的文本编辑软件都可对其编辑,而且格式固定,适合与其它软件进行数据交换。
DXF文件结构如下:
(1)DXF文件的总体结构
DXF图形交换文件由四个段组成,并加上一个结尾。按其顺序列出如下:
标题段(HEADER)
表段(TABLE)
块段(BLOCKS)
实体段(ENTITIES)
结尾(EOF)
(2)DXF文件的具体结构
一个DXF文件由若干个组构成,每个组占两行,第一行为组的代码,第二行为组值。组代码相当于数据类型的代码,由AutoCAD图形系统所规定,而组值为具体的数值,二者结合起来,则表示一个数据的含义和它的值。例如,代码20,代表一个点的Y坐标,占一行;而其第二行9900.351,则是点Y坐标的具体数值,二者结合,则表示某一点Y坐标值为9900.351。
①组代码和组值的类型
组代码为一个非负的、不超过三位的整数,而组值由组代码的类型决定。例如:


②组代码的含义
每个组代码均有规定的含义,有些代码含义是固定的,有些组代码则因应用场合不同而有多个含义。另外一些代码是备用的,到目前版本尚用到。它们的含义如下:
0表示一个事物开始。例如:一个段、表、块、图层、实体等。
1字符型数据的值。例如:TEXT的字符串、文件名、属性值等。
2一个事物的名字。例如:段、表、块、线型、视图等的名字。
3~5  字符型数据的值。例如:文件名、线型说明等。
6线型名(固定类型)
7字样名(固定类型)
8图层名(固定类型)
9标题变量名(固定类型)
10~18  X坐标值
20~28  Y坐标值
30~37  Z坐标值
38基面高
39厚度
40~48  高度、宽度、半径、距离、比例因子等。
49重复的值
50~58  角度值
62颜色号(固定类型)
66实体跟随标记,用于折线PLINE或带有属性的插入体。
70标题变量的状态,表的数量和标记。
71定义字样的对称方式及统计数量。
72文件或线型的对齐方式及统计数量。
73统计数量
999解释行
2.2  AutoCAD数据输入格式
在测绘工作中,AutoCAD数据输入格式一般为南方CASS格式、DWG格式、DXF格式,其中测图时南方CASS格式用的较多;与别的软件进行交换数据交换时,DXF格式用的较多;AutoCAD之间直接交换时,就用DWG格式。
南方CASS格式为:
点号,地物编码,Y,X,H 。
南方CASS格式为文本格式。
3Excel数据格式
在测绘工作中,Excel数据格式的常用格式主要为XLS和CSV(逗号分隔符),CSV格式为文本格式。
4AutoCAD与Excel数据交换方法
4.1 直接用AutoCAD与Excel自身的功能进行数据交换
很多设计好的数据(如公路放样数据),都是XLS格式,我们可以把它另存为CSV格式,与南方CASS的数据文件格式一样,只需要把文件的后缀CSV改为DAT,就可以被CASS软件直接进行取。
4.2 利用第三方软件对AutoCAD与Excel数据进行交换
为了实现高级语言与CAD连接(用DXF)方法,其基本原理是用高级语言执行后产生一个文件,这个文件的格式必须符合CAD的*.DXF文件的要求。下面以VB6.0为工具,对AutoCAD与Excel数据交换程序设计作简单介绍。
 4.2.1  VB6.0简介
Visual Basic(简称VB)是在原有Basic语言基础上进一步发展起来的,它简单易学,只要稍有语言基础就可以很快掌握并精通。它有如下特点:
(1)可视化的用户界面设计,能把程序设计人员从繁琐的界面设计中解脱出来。
(2)强大的多媒体功能可轻而易举地开发出集声音、动画、影像和图片于一体的多媒体应用程序。
(3)新增的网络功能提供了编写Internet程序的能力。
(4)可自己开发ActiveX控件和制作ActiveX文档。
4.2.2  VB对AutoCAD文件进行操作的程序设计
由于AutoCAD中的DXF是一种国际通用的标准文本格式文件,适合对其进行读写操作,应而VB程序的设计主要是针对DXF文件进行的。
下面的程序就是一个设计三维坐标文件的格式为:点号,X,Y,H;转换后的DXF文件包含点位、点名、高程注记三条信息,并对三者进行了分图层处理。另外,考虑到文字显示大小、数学坐标系和测绘坐标系的差别,程序设计了点图比例、高程注记小数位、DXF文件格式等选项,使数据转换形式更加灵活,转换后的图形编辑更加方便。
程序部分源代码如下:
 Text2.TEXT = Left(Text1.TEXT, Len(Text1.TEXT) - 3) & "DXF"
 Open Text2.TEXT For Output As #3
                  Print #3, 0
                  Print #3, "SECTION"
                  Print #3, 2
                  Print #3, "ENTITIES"
         For i = 1 To j
                  If Option1.Value = False Then
                           t = X(i): X(i) = Y(i): Y(i) = t
                  End If
                  Print #3, 0
                  Print #3, "Point"
                  Print #3, 8
                  Print #3, "点位"
                  Print #3, 10
                  Print #3, X(i)
                  Print #3, 20
                  Print #3, Y(i)
                  Print #3, 30
                  Print #3, h(i)
                  Print #3, 0
                  Print #3, "Text"
                  Print #3, 8
                  Print #3, "高程"
                  Print #3, 10
                  Print #3, X(i) + 0.5 * scalevalue / 1000
                  Print #3, 20
                  Print #3, Y(i) - scalevalue / 1000
                  Print #3, 30
                  Print #3, h(i)
                  Print #3, 40
                  Print #3, 2.5 * scalevalue / 1000
                  Print #3, 1
                  If Option3.Value = True Then hh = Int(h(i) + 0.5)
                  If Option4.Value = True Then hh = Int(h(i) * 10 + 0.5) / 10
                  If Option5.Value = True Then hh = Int(h(i) * 100 + 0.5) / 100
                  Print #3, hh
                  Print #3, 0
                  Print #3, "Text"
                  Print #3, 8
                  Print #3, "点号"
                  Print #3, 10
                  Print #3, X(i) - 15 * scalevalue * Len(dh(i)) / 6000
                  Print #3, 20
                  Print #3, Y(i) - scalevalue / 1000
                  Print #3, 30
                  Print #3, h(i)
                  Print #3, 40
                  Print #3, 2.5 * scalevalue / 1000
                  Print #3, 1
                  Print #3, dh(i)
          Next i
          Print #3, 0
          Print #3, "ENDSEC"
          Print #3, 0
          Print #3, "EOF"
          Close #3
          Exit Sub
4.2.3  VB对Excel文件进行操作的程序设计
Excel文件中的XLS格式与CSV格式是有区别的,XLS格式包含有所有的文件信息,而CSV格式只有内容,不含有文件的排版信息。为了保证文件的完整性,在利用VB对Excel文件读写时,都是直接采用XLS格式文件。利用VB软件中的引用功能就可以对Excel文件进行操作,而且不损坏其完整性。
下面就是一个VB对Excel文件读写的部分源代码。
Private Sub EXCEL_OPEN_Click() ' 打开EXCEL
        On Error Resume Next
        If Frmmain.Caption = "狮子山铜矿变形监测数据处理系统" Then
          MsgBox ("工程未打开!")
          'Unload Me
          Frmmain.Show
          Exit Sub
   End If
        Dim ExcelBook As Excel.Workbook '定义工作薄类
        Dim ExcelSheet As Excel.Worksheet '定义工作表类
          Set ExcelApp = CreateObject("Excel.Application")
          ExcelApp.Visible = True '界面可视
For j = 1 To DB_POINT_NUM '给单元格1行驶列赋值
          
                   xlsheet.Cells(j + 2, 1) = MEA_NUM_RPT(j * (MEA_SUM + 1))
                   xlsheet.Cells(j + 2, 2) = DB_DH_RPT(j * (MEA_SUM + 1))
                   xlsheet.Cells(j + 2, 3) = CDec(DB_X_RPT(j * (MEA_SUM + 1)))
                   xlsheet.Cells(j + 2, 4) = CDec(DB_Y_RPT(j * (MEA_SUM + 1)))
                   xlsheet.Cells(j + 2, 5) = DB_H_RPT(j * (MEA_SUM + 1))
                   xlsheet.Cells(j + 2, 6) = DB_XX(j * (MEA_SUM + 1))
                   xlsheet.Cells(j + 2, 7) = DB_YY(j * (MEA_SUM + 1))
                   xlsheet.Cells(j + 2, 8) = DB_HH(j * (MEA_SUM + 1))
                   xlsheet.Cells(j + 2, 9) = DB_DD(j * (MEA_SUM + 1))
                   xlsheet.Cells(j + 2, 10) = DB_SX(j * (MEA_SUM + 1))
                   xlsheet.Cells(j + 2, 11) = DB_SY(j * (MEA_SUM + 1))
                   xlsheet.Cells(j + 2, 12) = DB_SH(j * (MEA_SUM + 1))
                   xlsheet.Cells(j + 2, 13) = DB_SD(j * (MEA_SUM + 1))
                   xlsheet.Cells(j + 2, 14) = DB_DATE(j * (MEA_SUM + 1))
                   
   Next j
                'ActiveWorkbook.Save
                xlBook.Close
                xlApp.Quit
                Set xlApp = Nothing
End Sub
如果我们能使用程序对AutoCAD文件和Excel文件进行操作,他们它们之间的数据交换就简单了。

5结束语
凡是做测绘工作的人员,对AutoCAD和Excel的常用功能都比较熟悉,但光有这点是不够。在实际工作中,我们要运用里面的一些深层次的功能,如AutoCAD的DXF文件格式、Excel的CSV文件格式、南方CASS文件格式,发现它们的共性和使用方法,同时也要学会使用第三方软件,对这些格式的数据文件进行无缝读写,使测绘数据交换更快、更好。

参考文献:
[1]余承飞,《AutoCAD 2000二次开发技术》,北京人民邮电出版社
[2]张树兵等,《Visual Basic6.0中文版入门与提高》,清华大学出版社
[3]李世国,《AutoCAD 高级开发技术》,北京机械工业出版社

[作者简介]:杨先恩(1973-),男,测绘工程师,现为公司测绘项目技术负责人,长期从事地形测量、矿山测量、地质灾害治理工程变形监测、市政测量、水利水电工程测量及不动产测绘等工作。
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

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