• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
bobird的学习笔记
博客园    首页    新随笔    联系   管理    订阅  订阅

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();

 

 

        }

posted on 2013-01-11 13:58  bobird  阅读(289)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3