CreateNewObj( type )
参数
type 创建新对象类型,包括 0(点) 1(线) 2(面) 3(注记)
对于编码列表中已经存在的地物,使用编码直接创建,则图层颜色等属性自动关联
CreateNewObjByCode( code)
参数
code 创建地物的编码
注1:对于含有破折号的地物编码,如1102021-108 水准点,code输入1102021,不输入破折号后面的内容
注2:对于点地物,每添加一个对象,就要使用一次CreateNewObjByCode( code )
注3:如果要更改相关的属性,使用SSProcess.SetNewObjValue 属性,属性值的方式更改
命令
所以在日常使用中,一般不会创建新编码的地物,所以使用CreateNewObjByCode( code )
SSProcess.CreateNewObjByCode 1102021’水准点
SSProcess.AddNewObjPoint 1000.01, 1000.34,22.45, 0, ""
SSProcess.CreateNewObjByCode 4305034’支路边线,默认线型为曲线
SSProcess.AddNewObjPoint 1000.01, 1000.34,22.45, 0, ""
SSProcess.AddNewObjPoint 1310.01, 1010.34,22.45, 0, ""
SSProcess.AddNewObjPoint 1310.01, 1310.34,22.45, 0, ""
SSProcess.CreateNewObjByCode 5101012’高压连向,默认线型为直线
SSProcess.AddNewObjPoint 1000.01, 1000.34,22.45, 0, ""
SSProcess.AddNewObjPoint 1310.01, 1010.34,22.45, 0, ""
SSProcess.AddNewObjPoint 1310.01, 1310.34,22.45, 0, ""
SSProcess.CreateNewObjByCode 3103013’一般房屋,首末点闭合
SSProcess.AddNewObjPoint 1000.01, 1000.34,22.45, 0, ""
SSProcess.AddNewObjPoint 1310.01, 1010.34,22.45, 0, ""
SSProcess.AddNewObjPoint 1310.01, 1310.34,22.45, 0, ""
SSProcess.AddNewObjPoint 1000.01, 1000.34,22.45, 0, ""
Q1如何更改默认线型(直线or曲线)
SetNewObjValue设置SSObj_LineType属性,比如
SSProcess.CreateNewObjByCode 4305034'支路边线,默认线型为曲线
SSProcess.SetNewObjValue"SSObj_LineType",1
SSProcess.AddNewObjPoint 1000.01, 1000.34,22.45, 0, ""
SSProcess.AddNewObjPoint 1310.01, 1010.34,22.45, 0, ""
SSProcess.AddNewObjPoint 1310.01, 1310.34,22.45, 0, ""
Q2特征点如何设置J命令,比如室外楼梯怎么画?
补充一下可以修改的新建对象的属性有哪些:
SSObj_ID |
对象ID |
SSObj_Code |
编码 |
SSObj_LayerName |
层名 |
SSObj_Type |
对象类型,包括POINT(点)、LINE(线)、 AREA(面)和NOTE(注记)4种 |
SSObj_Color |
颜色,分0-256颜色号、颜色值和RGB(红,绿,蓝)三种指定方式 |
SSObj_LineType |
线形,包括0(点)、 1(线)、 2(曲线)、 3(园弧)和 4(圆) |
SSObj_LineWidth |
线宽,以图上0.01毫米为单位 |
SSObj_Name |
对象名称 |
SSObj_Byname |
别名,为FeatureCodeTB表中的Byname |
SSObj_Angle |
角度,以弧度为单位 |
SSObj_DataMark |
数据标识 |
SSObj_MemoData |
备注内容 |
SSObj_CreateTime |
创建时间 年-月-日 时:分:秒 格式 |
SSObj_ModifyTime |
修改时间 年-月-日 时:分:秒 格式 |
SSObj_FontWidth |
字宽,以图上0.01毫米为单位 |
SSObj_FontHeight |
字高,以图上0.01毫米为单位 |
SSObj_FontName |
字体名 |
SSObj_FontClass |
注记分类号 |
SSObj_FontAlignment |
对齐方式,包括0(中心)、1(左上角)、2(左下角)、3(左中)、4(右上角)、5(右中)、6(右下角)、7(上中)、8(下中) |
SSObj_FontDirection |
字头朝向,包括0(正东)、1(正北)、2(正西)、3(正南)、4(切线方向)、5(法线方向) |
SSObj_FontWordAngle |
字角度,以度为单位 |
SSObj_FontStringAngle |
串角度,以度为单位 |
SSObj_FontWeight |
字重 |
SSObj_FontIlaticAngle |
倾斜,包括0(不倾斜)、-1(左斜)、1(右斜) |
SSObj_FontDownAngle |
耸肩,包括0(不耸肩)、-1(左耸肩)、1(右耸肩) |
SSObj_FontUnderLine |
下划线,包括0(无下划线)、1(有下划线) |
SSObj_FontInterval |
字隔,以图上0.01毫米为单位 |
SSObj_FontString |
注记内容 |
[ExtAttr] |
扩展属性字段 |
根据注记分类号创建注记对象
CreateNewObjByClassfontclass
创建居民地名称注记,并更改其类型为线类型(默认注记为点类型)。
SSProcess.CreateNewObjByClass 399111
SSProcess.SetNewObjValue "SSObj_Type" ,Line
SSProcess.SetNewObjValue"SSObj_LineType",1’必须要更改这个属性
SSProcess.SetNewObjValue"SSObj_FontString","晁湖村4组"
SSProcess.AddNewObjPoint 1000.01, 1000.34,22.45, 0, ""
SSProcess.AddNewObjPoint 1040.01, 1000.34,22.45, 0, ""
想要编辑对象,首先要指定要编辑的对象,即要选择并筛选对象
SetSelectCondition函数
设定选择过滤条件。
SetSelectCondition conditionName, operateMode,conditionValue
参数:
ConditionName:
过滤条件名
条件分SSOBJ_开头的基本属性,<>括住的几何特性, []括住的扩展属性,{}括住的拓扑关系特性,CallBackFunc_开头的回调函数方式
SSObj_ID |
对象ID |
SSObj_GroupID |
对象组ID |
SSObj_Code |
编码 |
SSObj_LayerName |
层名 |
SSObj_Type |
对象类型,包括POINT(点)、LINE(线)、 AREA(面)和NOTE(注记)4种 |
SSObj_Color |
颜色,分COLORNO(颜色号)、颜色值和RGB(红,绿,蓝)三种指定方式 |
SSObj_LineType |
线形,包括0(点)、 1(线)、 2(曲线)、 3(园弧)和 4(圆) |
SSObj_LineWidth |
线宽,以图上0.01毫米为单位 |
SSObj_Name |
对象名称 |
SSObj_Byname |
别名,为FeatureCodeTB表中的Byname |
SSObj_ObjectName |
对象汉字名称,为FeatureCodeTB表中的ObjectName |
SSObj_Thickness |
厚度,为FeatureCodeTB表中的Thickness |
SSObj_ExplodeStatus |
打散状态,为FeatureCodeTB表中的Explode |
SSObj_FilterStatus |
过滤状态,为FeatureCodeTB表中的Filter |
SSObj_ReverseStatus |
反向状态,为FeatureCodeTB表中的Reverse |
SSObj_Angle |
角度,以弧度为单位 |
SSObj_DataMark |
数据标识(用户标识) |
SSObj_MemoData |
备注内容 |
SSObj_CreateTime |
创建时间 年-月-日 时:分:秒 格式 |
SSObj_ModifyTime |
修改时间 年-月-日 时:分:秒 格式 |
SSObj_FontWidth |
字宽,以图上0.01毫米为单位 |
SSObj_FontHeight |
字高,以图上0.01毫米为单位 |
SSObj_FontName |
字体名 |
SSObj_FontClass |
注记分类号 |
SSObj_FontAlignment |
对齐方式,包括0(中心)、1(左上角)、2(左下角)、3(左中)、4(右上角)、5(右中)、6(右下角)、7(上中)、8(下中) |
SSObj_FontPosType |
注记排列方式,包括0(均分)、1(散列) |
SSObj_FontDirection |
字头朝向,包括0(正东)、1(正北)、2(正西)、3(正南)、4(切线方向)、5(法线方向) |
SSObj_FontWordAngle |
字角度,以度为单位 |
SSObj_FontStringAngle |
串角度,以度为单位 |
SSObj_FontWeight |
字重 |
SSObj_FontIlaticAngle |
倾斜,包括0(不倾斜)、-1(左斜)、1(右斜) |
SSObj_FontDownAngle |
耸肩,包括0(不耸肩)、-1(左耸肩)、1(右耸肩) |
SSObj_FontUnderLine |
下划线,包括0(无下划线)、1(有下划线) |
SSObj_FontInterval |
字隔,以图上0.01毫米为单位 |
SSObj_FontString |
注记内容 |
SSObj_FontStringCount |
注记内容字符个数(汉字算两个字符) |
SSObj_Area |
面积,以平方米为单位 |
SSObj_Length |
2D长度,以米为单位 |
SSObj_3DLength |
3D长度,以米为单位 |
SSObj_PointCount |
空间点数 |
SSObj_X |
空间点首点X坐标 |
SSObj_Y |
空间点首点Y坐标 |
SSObj_Z |
空间点首点Z坐标 |
SSObj_PointName |
空间点首点点名 |
SSObj_PointType |
空间点首点点类型,包括0x0001(实测的或计算的)、0x0002(高程注记否)、0x0004(参加建模否)、0x0008(新产生的点或旧点)、0x0010(转向点或一般点)、0x0020(断点)、0x0040(直线)、0x0080(曲线)、0x00c0(圆弧)、0x1000(依附点)、0x2000(群集点)、0x4000(平滑点)、0x8000(特征点) |
SSObj_X(index) |
指定索引空间点X坐标 |
SSObj_Y(index) |
指定索引空间点Y坐标 |
SSObj_Z(index) |
指定索引空间点Z坐标 |
SSObj_PointName(index) |
指定索引空间点点名 |
SSObj_PointType(index) |
指定索引空间点 点类型,包括0x0001(实测的或计算的)、0x0002(高程注记否)、0x0004(参加建模否)、0x0008(新产生的点或旧点)、0x0010(转向点或一般点)、0x0020(断点)、0x0040(直线)、0x0080(曲线)、0x00c0(圆弧)、0x1000(依附点)、0x2000(群集点)、0x4000(平滑点)、0x8000(特征点) |
SSObj_SymType |
符号类型 (P,L,LC,LP,Y,H,E) |
SSObj_Reverse |
地物方向,0(正向)、1(反向) |
SSObj_DrawAreaLabelStatus |
面心点标注状态, 0(不注) 1(标注) |
SSObj_AreaLabelX |
面心标注点X坐标 |
SSObj_AreaLabelY |
面心标注点X坐标 |
SSObj_Reverse |
地物方向,0(正向)、1(反向) |
SSObj_Status |
地物状态,e_Valid = 0x0001, //有效 |
SSObj_GraphicInfo(flag) |
图形特征,flag可以是以下值: |
|
重叠对象,包括0(不重叠)、1(有重叠) |
|
封闭对象,包括0(不封闭)、1(封闭) |
|
点列方向,包括0(逆时针)、1(顺时针) |
扩展属性为扩展属性表或MemoData中的任一字段,需用[]括住字段名称
{OuterObj} |
外围对象,条件值填写选择过滤条件分组名 |
{NotOuterObj} |
无外围对象,条件值填写选择过滤条件分组名 |
{OuterObjSearchRange} |
外围对象最大搜索范围,以米为单位?什么意思 |
{NotOuterObjSearchRange} |
无外围对象最大搜索范围,以米为单位 |
{InnerObj} |
包含对象,条件值填写选择过滤条件分组名 |
{NotInnerObj} |
无包含对象,条件值填写选择过滤条件分组名 |
{InnerObjGetPointMode} |
被包含对象取点方式, 0(判断所有点) 1(只判断焦点) |
{CrossObj} |
相交对象,条件值填写选择过滤条件分组名 |
{NearObj} |
相近对象,条件值填写选择过滤条件分组名 |
{NotNearObj} |
无相近对象,条件值填写选择过滤条件分组名 |
{NearObjSearchRange} |
相近对象最大搜索范围,以米为单位 |
{NotNearObjSearchRange} |
无相近对象最大搜索范围,以米为单位 |
{OnLineObj} |
选择对象落在指定线上,条件值填写线选择过滤条件分组名 |
{NotOnLineObj} |
选择对象不落在线上,条件值填写线选择过滤条件分组名 |
{OnLineObjRange} |
判断点落在线上的范围,以米为单位 |
{SelectPolygon_GroupName} |
选择多边形分组名,条件值填写选择过滤条件分组名 |
{SelectPolygon_InOutMode} |
多边形选择方式,1(选内)2(选外)4(选择相交),允许多值相加 |
{SelectPolygon_CallBackFunc} |
过滤多边形内对象回调函数,条件值填写回调函数名称,如CallBackFunc_FilterObj,有岛时,只处理外环 |
{RepeatedInPolygon_GroupName} |
当前选择条件选中的多边形内多次出现的同类对象,条件值填写同类对象过滤条件分组名 |
{RepeatedInPolygon_FieldName} |
同类对象比较字段名列表,用,号分隔 |
{RepeatedInPolygon_ReturnFirst} |
是否返回首个重复对象(0不返回 1返回)" |
回调函数方式
回调函数必须在脚本中定义,函数参数按字符串方式传递,函数的返回值必须强制转成字符串.
CallBackFunc_函数名 |
回调函数方式,如"CallBackFunc_CheckString(SSObj_FontClass, SSObj_FontString)" |
OperateMode
:条件操作符
== |
等于 |
> |
大于 |
< |
小于 |
<> |
不等于 |
LIKE |
包含指定字符 |
NOT LIKE |
不包含指定字符 |
CompareNoCase |
忽略大小写等于比较 |
Dec |
小数位等于 |
ConditionValue:
条件值
根据条件名称,指定相应的值类型,如果一个条件需要指定多个或关系的值列表,可用"值1,值2,..."的方式描述。
选择过滤数据标识为1,闭合的图形并显示筛选到的图形的个数
SSProcess.SetSelectCondition"SSObj_DataMark","==","1"
SSProcess.SetSelectCondition"
SSProcess.SelectFilter
geocnt= SSProcess.GetSelGeoCount
选择过滤建筑名称为5#,建筑编号为1的闭合图形
SSProcess.SetSelectCondition"[JZMC]","==","5#"
SSProcess.SetSelectCondition"[JZBH]","==","1"
SSProcess.SetSelectCondition"
Q3:选择条件的是否重叠是什么意思?
对于基本属性、几何属性、扩展属性,其条件值为单一属性值,而对于拓扑关系属性,其条件值为过滤条件分组名,下面学习过滤条件分组名。
SetSelectConditionGroup函数
设定分组选择过滤条件。
SetSelectConditionGroup( groupName, conditionName,operateMode, conditionValue )
参数基本同设置选择过滤条件,只是多了个分组名,该函数,执行一次,设定分组的一个条件,允许多次执行以设定多个分组的多个选择条件,有多个条件时,条件的关系为与的关系。函数设定的分组选择条件,只供SetSelectCondition函数中设置拓扑关系特性时使用,在执行SelectFilter函数时,不会直接使用分组条件。
在分组选择条件使用完成后,必须调用ClearSelectConditionGroups函数释放空间。
SSProcess.SetSelectConditionGroup "范围线","SSObj_Code","==","1"
SSProcess.SetSelectCondition"[JZMC]","==","5#"
'SSProcess.SetSelectCondition"[JZBH]","==","1"
SSProcess.SetSelectCondition"
‘’SSProcess.SetSelectCondition"{OuterObjSearchRange}","==","0.1"
SSProcess.SetSelectCondition"{OuterObj}","==","范围线"
上面代码可以筛选出红色线内的图形。其中图形的建筑名称都设置为5#,建筑编号设置为1,范围线用编码为1的线圈出来。
在执行完选择集的操作后,要清空选择集和选择集操作
ClearSelectConditionGroups
‘ClearSelectConditionGroup
ClearSelectCondition
UpdateSysSelectionflag
实现系统选择集与脚本选择集之间的呼唤
Flag=1,脚本选择集更新到系统
Flag=0,系统选择集更新到脚本
|
地物 |
|
注记 |
|
|
获取选择集注记个数 |
GetSelNoteCount( )
|
获取选择集指定地物点数 |
GetSelGeoPointCount( index) |
获取选择集指定注记点数 |
GetSelNotePointCount( index ) |
获取选择地物指定点信息 |
GetSelGeoPoint( index, pointindex, x, y, z, point type, name ) |
获取选择集指定注记指定点信息 |
GetSelNotePoint( index, pointindex, x, y, z, point type, name )
|
获取选择集指定地物属性 |
GetSelGeoValue( index, attrField)
|
获取选择集指定地物属性 |
GetSelNoteValue( index, attrField)
|
获取指定ID的对象属性(不同于索引) |
GetObjectAttr( geoID, attrField) |
问题:如果使用GetObjectAttr( geoID,attrField)获取对象属性,则需要使用GetSelGeoValue( index,attrField)或者GetSelNoteValue(index, attrField)
获取对象的ID,那为什么不直接使用GetSelGeoValue( index,attrField)或者GetSelNoteValue(index, attrField)?GetObjectAttr( geoID,attrField)存在的意义是什么?
问题:不论是使用GetSelNoteValue(index, attrField)还是使用GetObjectAttr( geoID,attrField)都无法获取code信息,可以获取其他属性信息,为什么?
Sub OnClick()
SSProcess.PushUndoMark
SSProcess.ClearSelection
SSProcess.ClearSelectCondition
SSProcess.SetSelectCondition"SSObj_Type", "==", "NOTE"
SSProcess.SelectFilter
geocount = SSProcess.GetSelNoteCount()
id = SSProcess.GetSelNoteValue(1,"SSObj_id")
code = SSProcess.GetObjectAttr(CInt(id), "SSObj_code")’CInt的意义,为什么要取整?这两句代码直接用code=SSProcess.GetSelNoteValue(1,”SSObj_code”)不就’可以了吗,虽然这两个都获取不了code,获取别的属性是一样的,直接用Id,不用CIint(id)
MSGBOX id
msgbox code
End Sub
选择完图形后,就需要对图形进行相关的编辑操作
每次只能修改一个选择集的属性值:ChangeSelectionObjAttr attrField, attrValue
下面代码将房屋内的高程点的值设置为房屋面的高程
SSProcess.PushUndoMark
SSProcess.ClearSelection
SSProcess.ClearSelectConditionGroups
SSProcess.SetSelectCondition"SSObj_Code", "==", "3103013"
SSProcess.SetSelectConditionGroup "房屋面内高程点","SSObj_Code", "==", "7201001"
SSProcess.SetSelectConditionGroup "房屋面内高程点","{OuterObj}", "==", "房屋面"
SSProcess.SetSelectConditionGroup "房屋面","SSObj_Code", "==", "3103013"
SSProcess.SelectFilter
SSProcess.ChangeSelectionObjAttr"SSObj_Z", "SelectionGroup_房屋面内高程点(SSObj_Z(0))"
SSProcess.ClearSelectConditionGroups
Q4:对于筛选的多个房屋,是怎么做到将每个房屋内的高程分别设置给对应的房屋的?
把房屋内的注记内容分别设置给房屋的[结构]和[层数]
Function CallBackFunc_TrimJGString( string)
CallBackFunc_TrimJGString = Mid(string,1,1)
End Function
Function CallBackFunc_TrimCSString( string)
Dim strCS,strlen
strlen = Len(string)-1
strCS = ""
If strlen>0 Then
strCS = Mid(string, 2, strlen )
End If
If strCS ="" Then
strCS = "1"
End If
CallBackFunc_TrimCSString = strCS
End Function
Sub OnClick()
SSProcess.PushUndoMark
SSProcess.ClearSelection
SSProcess.ClearSelectConditionGroups
SSProcess.SetSelectCondition"SSObj_Code", "==", "3103013"
SSProcess.SetSelectConditionGroup "房屋面内注记","SSObj_Type", "==", "NOTE"
SSProcess.SetSelectConditionGroup "房屋面内注记","SSObj_FontClass", "==", "399109"
'SSProcess.SetSelectConditionGroup "房屋面内注记","SSObj_FontWidth", "==", "300"
SSProcess.SetSelectConditionGroup "房屋面内注记","{OuterObj}", "==", "房屋面"
SSProcess.SetSelectConditionGroup "房屋面","SSObj_Code", "==", "3103013"
SSProcess.SelectFilter
SSProcess.ChangeSelectionObjAttr"[JZJG]", "SelectionGroup_房屋面内注记(CallBackFunc_TrimJGString(SSObj_FontString))"
SSProcess.ChangeSelectionObjAttr"[FWCS]", "SelectionGroup_房屋面内注记(CallBackFunc_TrimCSString(SSObj_FontString))"
SSProcess.ClearSelectConditionGroups
end sub
SetChangeSelectionObjParameter设置修改选择集参数
ChangeSelectionObj修改选择集对象
将砼12的颜色变为3,砖11的颜色变为2
Sub OnClick()
SSProcess.ClearSelection
SSProcess.ClearSelectCondition
' SSProcess.SetSelectCondition"SSObj_Code","==","3103031"
SSProcess.SelectFilter
SSProcess.ClearChangeSelectionParameter
SSProcess.SetChangeSelectionObjParameter"[JZJG]=砼,[FWCS]=12", "SSObj_Color=COLORNO(3)"
SSProcess.SetChangeSelectionObjParameter"[JZJG]=砖,[FWCS]=11", "SSObj_Color=COLORNO(2)"
'SSProcess.SetChangeSelectionObjParameter"[结构]=8,[层数]=9","SSObj_Color=COLORNO(5)"
SSProcess.ChangeSelectionObj
SSProcess.RefreshView '刷新图形窗口
SSProject.RefreshWorkspace '刷新工作空间窗口
end sub
Q5:SSProcess.SelectFilter在这里的作用是什么,必须有这句话,否则就不能成。
Q6:如果我要将砼11、砖2的在建房屋改为绿色,并不改变砼11,砖2的一般房屋,怎么实现。
SetObjectAttr(geoID, attrField, attrValue)
该函数修改指定ID的对象的属性,所以一般要获取ID,使用
SSProcess.GetSelGeoValue(index,”SSObj_ID”)获取当前选择集指定地物对象属性,这种编辑对象的方式,适用于一个选择集内不同时修改属性的情况(那存在的意义是?个人认为用处不大)
比如help示例:
Sub OnClick()
SSProcess.PushUndoMark
SSProcess.ClearSelection
SSProcess.ClearSelectCondition
SSProcess.SetSelectCondition "SSObj_Type","==", "POINT"
SSProcess.SelectFilter
geocount = SSProcess.GetSelGeoCount()
If geocount > 0Then
For i=0 To geocount-1
id = SSProcess.GetSelGeoValue(i, "SSObj_ID")
SSProcess.SetObjectAttr CInt(id), "SSObj_Code","5201051"
Next
End If
End Sub
不就可以改为
SubOnClick()
SSProcess.PushUndoMark
SSProcess.ClearSelection
SSProcess.ClearSelectCondition
SSProcess.SetSelectCondition"SSObj_Type", "==", "POINT"
SSProcess.SelectFilter
SSProcess.ChangeSelectionObjAttr"SSObj_CODE", "5201071"
SSProcess.ClearSelectCondition
SSProcess.RefreshView '
刷新图形窗口
SSProject.RefreshWorkspace '
刷新工作空间窗口
数据输出
Sub OnClick()
SSProcess.PushUndoMark
SSProcess.ClearSelection
SSProcess.ClearSelectCondition
SSProcess.SetSelectCondition"SSObj_Type", "==", "NOTE"
SSProcess.SelectFilter
geocount = SSProcess.GetSelNoteCount()
set fso = CreateObject("Scripting.FileSystemObject")
set f = fso.CreateTextFile("C:\test.txt", true) '第二个参数表示目标文件存在时是否覆盖
msgbox geocount
FOR i =0 to geocount-1
dim str
id = SSProcess.GetSelNoteValue(i,"SSObj_id")
code = SSProcess.GetObjectAttr (id,"SSObj_LayerName")
str=SSProcess.GetObjectAttr(id,"SSObj_FontString")
color=SSProcess.GetObjectAttr(id,"SSObj_Color")
str=id+","+code+","+str+","+color+","
pointCnt=SSProcess.GetSelNotePointCount(i )
'msgbox pointCnt
for j=0 to pointCnt-1
dim x,y,z,pointtype,name
SSProcess.GetSelNotePoint i,j, x, y, z, pointtype, name
str=str+cstr(x)+","+cstr(y)+","+cstr(z)
msgbox str
next
f.writeline(str)
next
f.close()
End Sub
那么问题来了,由于每个字段的长度不同,导致数据没有对齐,如何实现右对齐?
坐标一般保留三位小数,如何实现?
str=str+cstr(FormatNumber(x,3,,,0))+","
+cstr(FormatNumber(y,3,,,0))+","
+cstr(FormatNumber(z,3,,,0))
3代表的小数位,0代表去掉千分位符号
Sub OnClick()
SSProcess.PushUndoMark
SSProcess.ClearSelection
SSProcess.ClearSelectCondition
SSProcess.SetSelectCondition"SSObj_Type", "==", "NOTE"
SSProcess.SelectFilter
geocount =SSProcess.GetSelNoteCount()
set app = CreateObject("Excel.Application")
app.Visible = True
if err.number <> 0 then
msgbox "请确认您已经正确安装Microsoft Excel 2000以上版本"
exit sub
end if
Set book = app.Workbooks.Add
Set sheet = book.ActiveSheet
If sheet Is Nothing Then
Set sheet = book.Sheets.Add
End If
'设置单元格水平居中
sheet.Cells.HorizontalAlignment=3
'设置单元格垂直居中
sheet.Cells.VerticalAlignment=2
'设置单元格显示两位小数,如13.5显示为13.50
sheet.columns(5).NumberFormatLocal="0.000"'设置第五列数字保留小数点后3位
'sheet.rows(3).NumberFormatLocal="0.00"'第三行
FOR i =0 to geocount-1
dim str
id = SSProcess.GetSelNoteValue(i,"SSObj_id")
code = SSProcess.GetObjectAttr (id,"SSObj_LayerName")
str=SSProcess.GetObjectAttr(id,"SSObj_FontString")
color=SSProcess.GetObjectAttr(id,"SSObj_Color")
'str=id+","+code+","+str+","+color+","
pointCnt=SSProcess.GetSelNotePointCount(i )
sheet.Cells(i+1,1)=id
sheet.Cells(i+1,2)=code
sheet.Cells(i+1,3)=str
sheet.Cells(i+1,4)=color
for j=0 to pointCnt-1
dim x,y,z,pointtype,name
SSProcess.GetSelNotePoint i,j, x, y, z, pointtype, name
'str=str+cstr(FormatNumber(x,3,,,0))+","+cstr(FormatNumber(y,3,,,0))+","+cstr(FormatNumber(z,3,,,0))
'msgbox str
sheet.Cells(i+1,5)=x
next
next
'设置根据内容自动调整列宽
sheet.Cells.EntireColumn.AutoFit
End Sub
输出结果
其他设置可参考http://blog.sina.com.cn/s/blog_65f27fc20101f63b.html