热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

读取shp属性表导出为excel表格和写入word文档

最近做了一些读取shp属性表另存为excel表格和写入word文档的小事情,把思路和代码记下来,以备以后查看,各位大神看到请绕道,高抬贵手 条件如下:必备一个word文档,且里面必

最近做了一些读取shp属性表另存为excel表格和写入word文档的小事情,把思路和代码记下来,以备以后查看,各位大神看到请绕道,高抬贵手《读取shp属性表导出为excel表格和写入word文档》

 条件如下:必备一个word文档,且里面必须有一张空表,假如我只需要读取shp属性表的两个字段:City(市名)和affcountyN(受灾县数量)

具体代码如下:

 public class Helper
    {

     public bool Execute(string excelPath, string docPath, string shpPath, out string message)
        {

            return ExecuteEX(excelPath, docPath, shpPath, out message);
        }
      
        ///


        /// 执行函数
        ///

        /// excel路径
        /// 文档路径
        /// shp文件路径
        ///
        private bool ExecuteEX(string excelPath, string docPath, string shpPath, out string message)
        {
            try
            {
                if (!judgeInOrOutFile(excelPath, docPath, shpPath))
                {
                    message = “文件输入不正确!”;
                    return false;
                }
                //判断excel文件是否存在,若存在删除
                if (File.Exists(excelPath))
                {
                    File.Delete(excelPath);
                }
                string docResultPath = Path.Combine(Path.GetDirectoryName(docPath), “data.doc”);
                //判断doc文件是否存在,若存在删除
                if (File.Exists(docResultPath))
                {
                    File.Delete(docResultPath);
                }
                //拷贝一份word文档
                File.Copy(docPath, docResultPath);
                //打开shp
                string folder = Path.GetDirectoryName(shpPath);
                IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
                IFeatureWorkspace pWS = (IFeatureWorkspace)pWSF.OpenFromFile(folder, 0);
                IFeatureClass pFeatureClass = pWS.OpenFeatureClass(Path.GetFileNameWithoutExtension(shpPath));

                //获得shp属性表并创建dataTable
                IFeatureCursor featureCursor = pFeatureClass.Search(null, false);
                IFeature feature = featureCursor.NextFeature();
                DataTable dt = NewDataTable();
                string value = null;
                while (feature != null)
                {
                    //新建行
                    DataRow dr = dt.NewRow();
                    //从shp属性表中获得city属性
                    value = feature.get_Value(pFeatureClass.FindField(“City”)).ToString();
                    //转换为汉字
                    string strvalue = GetVlue(value);
                    //赋值
                    dr[“City”] = strvalue;
                    value = feature.get_Value(pFeatureClass.FindField(“affcountyN”)).ToString();
                    dr[“affcountyN”] = Math.Round(TODouble(value), 2);
                    //datatable添加此行
                    dt.Rows.Add(dr);
                    feature = featureCursor.NextFeature();
                }
                //创建一个wordApplication
                WordOper wordOper = new WordOper();
                wordOper.OpenAndActive(docResultPath, false, false);
                //表格赋值
                wordOper.TableValue(dt);
                wordOper.Save();
                wordOper.Close();

                //改变表格列名
                dt.Columns[“City”].ColumnName = “地区”;
                dt.Columns[“affcountyN”].ColumnName = “直接经济损失(万元) “;
                //另存表格
                ExcelOper excel = new ExcelOper();

                Hashtable hashTable = new Hashtable();
                hashTable.Add(“直接经济损失分布产品”, dt);
                bool issucess = false;
                if (excel.WriteExcel(excelPath, hashTable, out message))
                {
                    message = “数据生成成功!”;
                    issucess = true;
                }
                else
                {
                    message = “统计数据生成失败!”;
                    issucess = false;
                }
                return issucess;
            }
            catch (Exception ex)
            {
                message = “失败!”;
                return false;
            }
        }
        ///


        /// 新建datatable
        ///

        /// 返回datatable
        private DataTable NewDataTable()
        {
            //新建datatable
            DataTable dt = new DataTable();
            //新建列
            DataColumn dCol = null;
            dCol = new DataColumn();
            // 指定列名和类型
            dCol.ColumnName = “City”;
            dCol.DataType = typeof(string);
            dt.Columns.Add(dCol);

            dCol = new DataColumn();
            dCol.ColumnName = “affcountyN”;
            dCol.DataType = typeof(double);
            //  datatable添加列
            dt.Columns.Add(dCol);
            return dt;
        }

        ///


        /// 判断输入输出格式是否正确
        ///

        /// excel路径
        /// 文档路径
        /// shp文件
        ///
        private bool judgeInOrOutFile(string excelPath, string docPath, string shpPath)
        {
            //判断excel文件名称是否正确,不正确则运行失败
            if (!excelPath.EndsWith(“.xls”) && !excelPath.EndsWith(“.xlsx”))
            {
                MessageBox.Show(excelPath + “表格名称输入不正确!”);
                return false;
            }
            //判断doc文件名称是否正确,不正确则运行失败
            if (!File.Exists(docPath))
            {
                MessageBox.Show(docPath + “不存在!”);
                return false;
            }
            //判断shp文件是否存在,不存在则运行失败
            if (!File.Exists(shpPath))
            {
                MessageBox.Show(shpPath + “不存在!”);
                return false;
            }
            return true;
        }
        ///
        /// string 转换为double
        ///

        /// string 值
        ///
        private double TODouble(string value)
        {
            try
            {
                double number = Convert.ToDouble(value);
                return number;
            }
            catch (Exception ex)
            {
                return 0;
            }
        }
        ///
        /// 转换为汉字
        ///

        ///
        ///
        private string GetVlue(string name)
        {
            byte[] temp = Encoding.GetEncoding(“ISO8859-1”).GetBytes(name);
            string value2 = Encoding.Default.GetString(temp);
            return value2;
        }
     }

word文档代码:

  public class WordOper
    {

        #region 私有成员

        private Microsoft.Office.Interop.Word.ApplicationClass _wordApplication;
        private Microsoft.Office.Interop.Word.Document _wordDocument;
        object missing = System.Reflection.Missing.Value;

        #endregion

        #region  公开属性

        ///


        /// ApplciationClass
        ///

        public Microsoft.Office.Interop.Word.ApplicationClass WordApplication
        {
            get
            {
                return _wordApplication;
            }
        }

        ///


        /// Document
        ///

        public Microsoft.Office.Interop.Word.Document WordDocument
        {
            get
            {
                return _wordDocument;
            }
        }

        #endregion

        #region  构造函数

        public WordOper()
        {
            _wordApplication = new Microsoft.Office.Interop.Word.ApplicationClass();
        }

        public WordOper(Microsoft.Office.Interop.Word.ApplicationClass wordApplication)
        {
            _wordApplication = wordApplication;
        }

        #endregion

        #region 基本操作(新建、打开、保存、关闭)

        ///


        /// 打开指定文件
        ///

        /// 文件名(包含路径)
        /// 打开后是否只读
        /// 打开后是否可视
        /// 打开是否成功
        public bool OpenAndActive(string FileName, bool IsReadOnly, bool IsVisibleWin)
        {
            if (string.IsNullOrEmpty(FileName))
            {
                return false;
            }
            try
            {
                _wordDocument = OpenOneDocument(FileName, missing, IsReadOnly, missing, missing, missing, missing, missing, missing, missing, missing, IsVisibleWin, missing, missing, missing, missing);
                _wordDocument.Activate();
                return true;
            }
            catch
            {
                return false;
            }
        }

        ///


        /// 关闭
        /// Closes the specified document or documents.
        ///

        public void Close()
        {
            if (_wordDocument != null)
            {
                //垃圾回收
                _wordDocument.Close(ref missing, ref missing, ref missing);
                ((Microsoft.Office.Interop.Word._Application)_wordApplication).Application.Quit(ref missing, ref missing, ref missing);
                GC.Collect();
            }
        }

        ///


        /// 保存
        ///

        public void Save()
        {
            if (_wordDocument == null)
            {
                _wordDocument = _wordApplication.ActiveDocument;
            }
            _wordDocument.Save();
        }

        ///


        /// 打开一个已有文档
        ///

        ///
        ///
        ///
        ///
        ///
        ///
        ///
        ///
        ///
        ///
        ///
        ///
        ///
        ///
        ///
        ///
        ///
        public Microsoft.Office.Interop.Word.Document OpenOneDocument(object FileName, object ConfirmConversions, object ReadOnly,
            object AddToRecentFiles, object PasswordDocument, object PasswordTemplate, object Revert,
            object WritePasswordDocument, object WritePasswordTemplate, object Format, object Encoding,
            object Visible, object OpenAndRepair, object DocumentDirection, object NoEncodingDialog, object XMLTransform)
        {
            try
            {
                return _wordApplication.Documents.Open(ref FileName, ref ConfirmConversions, ref ReadOnly, ref AddToRecentFiles,
                    ref PasswordDocument, ref PasswordTemplate, ref Revert, ref WritePasswordDocument, ref WritePasswordTemplate,
                    ref Format, ref Encoding, ref Visible, ref OpenAndRepair, ref DocumentDirection, ref NoEncodingDialog, ref XMLTransform);
            }
            catch
            {
                return null;
            }
        }
        #endregion

        #region 查找、替换

        ///


        /// 在文档中写表格
        ///

        ///
        ///
        public bool TableValue(System.Data.DataTable dt)
        {
            try
            {
                Table table = _wordDocument.Tables[1];
                if (table.Rows.Count == 1)
                    table.Rows.Add(missing);
                for (int col = 1; col                 {
                    for (int row = 0; row                     {
                        table.Cell(row + 2, col).Range.Text = dt.Rows[row][col].ToString();
                        if (row != dt.Rows.Count – 1)
                            table.Rows.Add(missing);
                    }
                }
                return true;
            }
            catch
            {
                return false;
            }
        }

        #endregion
    }

excel相关代码:

    public class ExcelOper
    {
        private Application _excelApp = null;
        public ExcelOper()
        {

        }

        #region 写Excel

        ///


        /// 创建Excel进程
        ///

        ///
        private Application GetExcelApp()
        {
            Application excelApp = new Application();
            excelApp.Application.Workbooks.Add(true);
            _excelApp = excelApp;

            return excelApp;
        }

        ///


        /// 把DataTable的内容写入Excel
        ///

        /// excel文件的路径
        /// key:sheetName,value:DataTable
        ///
        public bool WriteExcel(string strExcelPath, Hashtable htDataTable, out string message)
        {
            if (htDataTable == null || htDataTable.Count == 0)
            {
                message = “数据表为空”;
                return false;
            }

            bool writeRst = false;
            try
            {
                if (_excelApp == null)
                {
                    GetExcelApp();
                }

                //依次写入Sheet页
                int countNum = 1;
                foreach (DictionaryEntry de in htDataTable)
                {
                    string sheetName = de.Key.ToString();
                    System.Data.DataTable dtTable = (System.Data.DataTable)de.Value;

                    Worksheet excelSheet = null;
                    if (countNum == 1)
                    {
                        excelSheet = (Worksheet)_excelApp.Worksheets[countNum];
                    }
                    else
                    {
                        excelSheet = (Worksheet)_excelApp.Worksheets.Add(Type.Missing, Type.Missing, 1, Type.Missing);
                    }
                    excelSheet.Name = sheetName;
                    bool sheetRst = writeSheet(excelSheet, dtTable);
                    if (!sheetRst)
                    {
                        throw new Exception(sheetName + “创建失败!”);
                    }
                    countNum++;
                }

                //保存
                _excelApp.Visible = false;
                _excelApp.DisplayAlerts = false;
                _excelApp.AlertBeforeOverwriting = false;
                _excelApp.ActiveWorkbook.SaveAs(strExcelPath, Type.Missing, null, null, false, false,
                                                    XlSaveAsAccessMode.xlNoChange, null, null, null, null, null);
                message = “数据输出成功!”;
                writeRst = true;
            }
            catch (Exception ex)
            {
                message = ex.Message;
                //LogHelper.Error.Append(ex);
                writeRst = false;
            }
            finally
            {
                //关闭Excel进程
                object missing = System.Reflection.Missing.Value;
                _excelApp.ActiveWorkbook.Close(missing, missing, missing);
                _excelApp.Quit();
                _excelApp = null;

                //垃圾回收
                GC.Collect();
            }

            return writeRst;
        }
        ///


        /// 写Sheet页
        ///

        ///
        ///
        ///
        private bool writeSheet(Worksheet excelSheet, System.Data.DataTable dtTable)
        {
            if (excelSheet == null || dtTable == null)
            {
                return false;
            }

            //列名
            for (int i = 0; i             {
                DataColumn dtColumn = dtTable.Columns[i];
                string caption = dtColumn.Caption;
                excelSheet.Cells[1, i + 1] = caption;
            }

            //写入值
            for (int i = 0; i             {
                for (int j = 0; j                 {
                    object objValue = dtTable.Rows[i][j];
                    excelSheet.Cells[2 + i, j + 1] = objValue;
                }
            }

            excelSheet.Columns.AutoFit();
            return true;
        }
        #endregion

    }


推荐阅读
  • 手把手教你使用GraphPad Prism和Excel绘制回归分析结果的森林图
    本文介绍了使用GraphPad Prism和Excel绘制回归分析结果的森林图的方法。通过展示森林图,可以更加直观地将回归分析结果可视化。GraphPad Prism是一款专门为医学专业人士设计的绘图软件,同时也兼顾统计分析的功能,操作便捷,可以帮助科研人员轻松绘制出高质量的专业图形。文章以一篇发表在JACC杂志上的研究为例,利用其中的多因素回归分析结果来绘制森林图。通过本文的指导,读者可以学会如何使用GraphPad Prism和Excel绘制回归分析结果的森林图。 ... [详细]
  • Python中sys模块的功能及用法详解
    本文详细介绍了Python中sys模块的功能及用法,包括对解释器参数和功能的访问、命令行参数列表、字节顺序指示符、编译模块名称等。同时还介绍了sys模块中的新功能和call_tracing函数的用法。推荐学习《Python教程》以深入了解。 ... [详细]
  • 引号快捷键_首选项和设置——自定义快捷键
    3.3自定义快捷键(CustomizingHotkeys)ChemDraw快捷键由一个XML文件定义,我们可以根据自己的需要, ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • 浙江大学2005–2006学年秋冬季学期《大学计算机基础》课程期末考试试卷开课学院:计算中心,考试形式:闭卷,允许带入场考试 ... [详细]
  • WPF之Binding初探
      初学wpf,经常被Binding搞晕,以下记录写Binding的基础。首先,盗用张图。这图形象的说明了Binding的机理。对于Binding,意思是数据绑定,基本用法是:1、 ... [详细]
author-avatar
linxin66063
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有