Engine中如何将Excel表中的坐标数据导入mdb中?

Engine中如何将Excel表中的坐标数据导入mdb中?
已邀请:

朱新颖

赞同来自:

【解决办法】:
最简单的方法是直接将Excel中的点坐标生成内存点图层,主要接口:IXYEventSourceName、IXYEventSource和IXYEvent2FieldsProperties。然后利用IFeatureDataConverter.ConvertFeatureClass 将该内存中的点要素类导出到mdb中。类似于ArcMap中的Add XY Data,然后Export Data的操作。


private void excel生成点ToolStripMenuItem_Click(object sender, EventArgs e) 
 { 
 IWorkspaceFactory wsf = new ExcelWorkspaceFactoryClass(); 
 IWorkspace ws = wsf.OpenFromFile(@D:\temp\中线成果点.xls, 0); 
 IEnumDataset enumDatasetName = ws.get_Datasets(esriDatasetType.esriDTTable); 
 enumDatasetName.Reset(); 
 IDataset dataset = enumDatasetName.Next(); 
 ITable table = dataset as ITable; 
 ISpatialReference spatialReference = new UnknownCoordinateSystemClass(); 
 CreateXYEventSource(table, spatialReference); 
 
 } 
 public void CreateXYEventSource(ITable pTable, ISpatialReference pSpatialReference) 
 { 
IXYEvent2FieldsProperties pEvent2FieldsProperties = new XYEvent2FieldsPropertiesClass(); 
 pEvent2FieldsProperties.XFieldName = X; 
pEvent2FieldsProperties.YFieldName = Y; 
 pEvent2FieldsProperties.ZFieldName = Z; 
IDataset pSourceDataset = (IDataset)pTable; 
 IName sourceName = pSourceDataset.FullName; 
 IXYEventSourceName pEventSourceName = new XYEventSourceNameClass(); 
 pEventSourceName.EventProperties = pEvent2FieldsProperties; 
 pEventSourceName.EventTableName = sourceName; 
 pEventSourceName.SpatialReference = pSpatialReference; 
 IName pName = (IName)pEventSourceName; 
 IXYEventSource pEventSource = (IXYEventSource)pName.Open(); 

IWorkspaceName targetWorkspaceName = new WorkspaceNameClass 
 { 
 WorkspaceFactoryProgID = esriDataSourcesGDB.AccessWorkspaceFactory, 
 PathName = @D:\temp\test.mdb 
}; 

 IFeatureClassName targetFeatureClassName = new FeatureClassNameClass(); 
 IDatasetName targetDatasetName = (IDatasetName)targetFeatureClassName; 
 targetDatasetName.Name = point; 
 targetDatasetName.WorkspaceName = targetWorkspaceName; 
 IFeatureDataConverter featureDataConverter = new FeatureDataConverterClass(); 
 IEnumInvalidObject enumInvalidObject = featureDataConverter.ConvertFeatureClass(pEventSourceName as IFeatureClassName, null, null, targetFeatureClassName, null, null, , 1000, 0); 
}

要回复问题请先登录注册