杨先恩
文山蔚鑫地矿工程勘察有限公司,云南 文山 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-),男,测绘工程师,现为公司测绘项目技术负责人,长期从事地形测量、矿山测量、地质灾害治理工程变形监测、市政测量、水利水电工程测量及不动产测绘等工作。