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(名字够唬吧)
posted on 2012-04-27 11:21 lufangtao 阅读(7233) 评论(0) 编辑 收藏 举报