Excel和Txt转成dbf的
来自:http://www.gisall.com/html/63/151663-6859.html
Excel和Txt转成dbf的
public static void ConvertTxt2dbf(string pFilePath,string pTablePath)
{
System.IO.FileStream pFileStream = new System.IO.FileStream(pFilePath,FileMode.Open);
StreamReader pStreamReader = new StreamReader(pFileStream);
string pStrReader = pStreamReader.ReadLine();
if (pStrReader == null)
return;
IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
IWorkspace pFeatWS = pWorkspaceFactory.OpenFromFile(Path.GetDirectoryName(pTablePath), 0);
IFeatureWorkspace pFeatureWs = pFeatWS as IFeatureWorkspace;
string [] pNames = pStrReader.Split(\’,\’);//txt 用 逗号隔开
IObjectClassDescription pObject = new ObjectClassDescriptionClass();
IFields pFields= pObject.RequiredFields;
IFieldsEdit pFieldsE= pFields as IFieldsEdit;
for(int i=0 ;i<pNames.Length;i++)
{
IField pField = new FieldClass();
IFieldEdit pFieldE = pField as IFieldEdit;
pFieldE.Name_2 = pNames[i];
if (i == 2 || i == 3)//这两个字段为数字,我存储经度度和纬度的。
{
pFieldE.Type_2 = esriFieldType.esriFieldTypeDouble;
}
else
{
pFieldE.Type_2 = esriFieldType.esriFieldTypeString;
}
pFieldE.Length_2=20;
pFieldsE.AddField(pField);
}
ITable pTable = pFeatureWs.CreateTable(Path.GetFileNameWithoutExtension(pTablePath),pFields,null,null,””);
//第二行
pStrReader = pStreamReader.ReadLine();
int pIndex = 0;
(pFeatWS as IWorkspaceEdit).StartEditing(true);
(pFeatWS as IWorkspaceEdit).StartEditOperation();
while (pStrReader!=null)
{
pIndex++;
string [] pValuess = pStrReader.Split(\’,\’);
ICursor pCusor = pTable.Insert(true);
IRowBuffer pRowBuf = pTable.CreateRowBuffer();
for(int i=1;i<pTable.Fields.FieldCount;i++)
{
pRowBuf.set_Value(i,pValuess[i-1]);
}
pCusor.InsertRow(pRowBuf);
if (pIndex == 500)
{
pCusor.Flush();
pIndex = 0;
}
pStrReader= pStreamReader.ReadLine();
}
(pFeatWS as IWorkspaceEdit).StopEditing(true);
(pFeatWS as IWorkspaceEdit).StopEditOperation();
}
public static void ConvertExcel2dbf(string pFilePath, string pTablePath)
{
OleDbConnection pConn = new OleDbConnection();
pConn.ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;” + “Data Source=” + pFilePath + “;” + “Extended ProPerties= \”Excel 12.0;HDR=Yes;\””;
pConn.Open();
//Application pExcel = new Application();
//Workbook pWb = pExcel.Workbooks.Open(pFilePath);
//string pName= (pWb.Worksheets[1] as Worksheet).Name;
DataSet pDataSet = new DataSet();
//必须加上$ 不然出错
OleDbDataAdapter pCommand = new OleDbDataAdapter(“select * from [Ex$]”, pConn);
pCommand.Fill(pDataSet);
IObjectClassDescription pObject = new ObjectClassDescriptionClass();
IFields pFields = pObject.RequiredFields;
IFieldsEdit pFieldsE = pFields as IFieldsEdit;
int pColumnCount = pDataSet.Tables[0].Columns.Count;
for (int i = 0; i < pColumnCount; i++)
{
IField pField = new FieldClass();
IFieldEdit pFieldE = pField as IFieldEdit;
pFieldE.Name_2 = pDataSet.Tables[0].Columns[i].ColumnName;
if (i == 2 || i == 3)// 这两列存储经纬度
{
pFieldE.Type_2 = esriFieldType.esriFieldTypeDouble;
}
else
{
pFieldE.Type_2 = esriFieldType.esriFieldTypeString;
}
pFieldE.Length_2 = 20;
pFieldsE.AddField(pField);
}
//行数
int pCount = pDataSet.Tables[0].Rows.Count;
int pIndex = 0;
IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
IWorkspace pFeatWS = pWorkspaceFactory.OpenFromFile(Path.GetDirectoryName(pTablePath), 0);
IFeatureWorkspace pFeatureWs = pFeatWS as IFeatureWorkspace;
ITable pTable = pFeatureWs.CreateTable(Path.GetFileNameWithoutExtension(pTablePath), pFields, null, null, “”);
(pFeatWS as IWorkspaceEdit).StartEditing(true);
(pFeatWS as IWorkspaceEdit).StartEditOperation();
for (int i = 0; i < pCount; i++)
{
DataRow pRow = pDataSet.Tables[0].Rows[i];
ICursor pCusor = pTable.Insert(true);
IRowBuffer pRowBuf = pTable.CreateRowBuffer();
for (int j = 0; j < pColumnCount; j++)
{
pRowBuf.set_Value(j + 1, pRow[j].ToString());
}
pCusor.InsertRow(pRowBuf);
if (pIndex == 500)
{
pCusor.Flush();
pIndex = 0;
}
}
(pFeatWS as IWorkspaceEdit).StopEditing(true);
(pFeatWS as IWorkspaceEdit).StopEditOperation();
}