来自: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();

 

 

        }

版权声明:本文为bobird原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/bobird/articles/2856330.html