• C# Word.Office操作总结


      最近这段时间,一直忙于修改一个我感觉从设计和编码方面都很烂的一个系统,各种软件设计中的错误,我们一边给他修改功能,一边进行代码重构,其中,让我感觉比较麻烦的是Office的操作,所以我就花了一点时间总结了这个项目中需要的Office.Word的基本操作,主要是在这项目中用到的操作,没有用到的也就没有涉及到。

      首先,我要说一下的是Word中的表格操作。在我的程序中我是用WordTable这个类来实现的。按照一般思维,我们首先是需要一个Table对象,显然,这个对象是 Microsoft.Office.Interop.Word.Table类型的。有了这个表格对象了,我们就可以在上面进行操作了,一帮的Table操作都有啥哪?

      1.构造一个表格(除了使用构造函数来构造WordTable这个类以外)我还专门写了一个函数来构造表格。在这里我给出这个函数的完整代码((*^__^*) 有原因的)

      public void ConstructTable(List<int> columnWeight)
            {
                _SetTableStyle(ref tableOne);
                DesginTableEvent(ref this.tableOne, columnWeight);
            }

    这个函数里面调用了一个DesginTableEvent类似一个函数的东西,其实...

    public delegate void DesginTableHandler(ref Microsoft.Office.Interop.Word.Table table, List<int> columnWeight);
            public event DesginTableHandler DesginTableEvent;

    相信你已经看懂了,对了这是一个事件函数,我们为什么这样设计哪,其实不难想想,你想,我们设计的表格是千变万化的,怎么可能使用一个简单的函数就能搞定了哪,我们肯定要会根据每个人的不同来进行自己设计啊,是啊,DIY的表格式多么有吸引力啊,这里我们就是基于这个目的的((*^__^*) 有点大..)

      2.上面的函数中有一个_SetTableStyle(ref tableOne)的函数,这个是设计表格的样式的函数,由于我们修改的项目的表格样式都基本上都是一致的所以,这里我把这个函数写成了一个私有的函数,大家可以参考其中的内容进行自己的DIY设计。

      3.这里,我们马上就要接触到具体的表格操作了,先问自己一个问题,如何简单的表示表格,YES!用单元格,那如何表示一个单元格,YES!行和列,所以,我就用一个新的类来表示表格中的单元格,WordTableCell,这里不用给出具体的代码,大家都应该明白其中有啥了吧。

      4.下面我们开始真正的表格操作,第一个你想到的可定是如何填表了。我们使用了函数 

       public void FillingTableContent(Dictionary<WordCell, string> cellContent),应该很容易看明白这个函数的意图和用法吧(如果实在不明白,可以参考完整源代码,里面有详细的说明)

      5.合并单元格函数 void MergeCell(WordCell merge, WordCell merged)

      6.合并标题性质的函数    public void MergeTitleCell(WordCell merge, WordCell merged),这个函数与上面的函数的区别在于:上面的单元格只是简单的合并单元格,而这个合并以后会出现标题形式(我是个工科学生,真的没有办法有语言来解释啥叫标题形式的,你可以运行代码自己看或是看下面的图片)

      

    这个是标题式的合并

     这个是一般的单元格的合并,(其实看起来差不多,其实是有差别的,请仔细比较)

      7.在一个表格行后面添加一个行   public void AddTableRow(int row)

      8.在一个表格行后面删除一行  public void DeleteTableRow(int row)

      9.在一个表格列后面添加以列  public void AddTableColumn(int column)

      10.在一个表格最后添加一列  public void AddColumnEndTable()(可以用上面的实现,但是由于非常常用,所有我单独拿出来,其实内部也是用上面的这个函数实现的)

      11.在表格最后添加一行  public void AddRowEndTable()(不解释)

      12.获得表格当前的行数   public int CurrentTableRow(这是个属性)

      13.获得表格当前的列数   public int CurrentTableColumn

    还有很多的操作可以完成,我这里只是使用了这些,所有就说这么多

      下面我们开始进行Word操作的说明。主要也就是类MyWord(这个是我自己的类)的实现

      protected Microsoft.Office.Interop.Word.Application _WordApplicMain;
      protected Microsoft.Office.Interop.Word.Document _MainDoc;

      上面这两个,不管你是否知道啥意思,都必须包含在你的类中,其实我们可以望文生义的认为,_WordApplicationMain这个是用来管理整个Word应用程序的,而_MainDOc这个仅仅是表示的是Word中的文档元素(是不是感觉起一个好的名字,可以让你的API更加流行,尤其是这种分层的命名方法,也就是一层一层的加上命名空间的方法,是不是看起来很爽啊!(*^__^*) )。下面我们按照一般Word操作的顺序来说明。

      1.要操作Word必须打开(新建)一个Word. CreateWord()这个函数就帮你搞定了,但是,你必须在构建MyWord类是传递一个保存路径,不然的话,新建的word就保存到了默认的路径(看代码中)下。

      2.设置页面格式函数 public void SetPageDefaultStyle(MyWordPageStyle myWordPageStyle) 其中,有个MyWordPageStyle的类。

      3.设置当前页面格式的函数 public void SetCurrentPageStyle(MyWordCurrentStyle currentPageStyle)其中,有个MyWordCurrentSytle的类

      4. 向Wrod中写入内容的函数:public void WriteContent(string content)

      5.换页   public void Feed()

      6. 设置页眉  public void SetPageHeader(string pageHeaderContent)

      7.设置页脚  public void SetPageFooter(string pageFooterContent)

      8.下面的几个函数是在Word中添加表格,一开始想把表格创建放到WrodTable这个类中,但是,最后想了想,只有Word才可以创建表格,而表格自己创建了表格放在那里啊,所有,果断的把Word创建表格的方法放在了MyWrod中.

      创建表格  

       

        public void CreateTable(int rowNumber, int columnNumber, List<int> columnWeight)
            {
                _WordTable = new MyWordTable.WordTable();
                _WordTable.TableOne = _MainDoc.Tables.Add(_WordApplicMain.Selection.Range, rowNumber, columnNumber, ref Nothing, ref Nothing);
                _WordTable.DesginTableEvent += _DesginTable;
                _WordTable.ConstructTable(columnWeight);
            }

      你可能欣喜的发现,我们终于使用了_WordTable.DesginTableEvent += _DesginTable;然而,当你看到下面一个函数时,你又是一顿失望,(这么麻烦)

      protected virtual void _DesginTable(ref Microsoft.Office.Interop.Word.Table table, List<int> columnWeight)
            {
                DesginTable(ref table, columnWeight);
                _WordTable.TableOne = table;
            }
      public delegate void DesginTableHandler(ref Microsoft.Office.Interop.Word.Table table, List<int> columnWeight);
            public event DesginTableHandler DesginTable;

    我晕,又是一次....

    这下你明白了吗?是不是更晕了,这里不做过多的解释,如果想看的更明白,请参考完整代码。

      9.     public void SaveWord()((*^__^*) 我不知道这个是干嘛的,你知道吗?)

    以上基本上已经是一个相对比较完整的Word操作了,但是,在我们的项目中,有了很大的Word模板,所以,这里我也加入了MyWordWithTemplate这个类,关于这个类的解释,我在MyWordWithTemplate.cs中开始做了解释,这里不在废话了。

     这个类中没有什么其他的,就是一些常用的函数,这里也就不过多的说明。好了,希望大家在我这个基础上加入更多的功能,我已经搭建了一个名字很大的项目,叫(忘了),里面的层次应该还算是比较清晰,希望大家在这个基础上再添加新的功能。

     完整代码下载:Microsoft.Office.rar(名字够唬吧)

      

  • 相关阅读:
    (转)JavaScript html js 地区二级联动,省市二级联动,省市县js+xml三级联动
    (转)PHP分页程序源码
    html select的事件 方法 属性
    mysql 插入中文乱码解决方案 转
    (转)jquery遍历之parent()与parents()的区别 及 parentsUntil() 方法
    作业二 总结
    第一次实验总结
    自我介绍
    linux环境下快速定位位置的一个小hack
    Script of modifying ether card MAC address under linux
  • 原文地址:https://www.cnblogs.com/lufangtao/p/2472033.html
Copyright © 2020-2023  润新知