C#操作Word2010实现
来源:互联网 发布:南昌室内设计软件班 编辑:程序博客网 时间:2024/05/21 14:58
概述
某项目需要自动生成Word文档,查找了许多资料,发现还是C#实现起来比较容易,也比较灵活。
环境:
Office 2010
Visual Studio 2010
Win10
网上找了很多教程,首先需要设置引用。
1.右击“解决方案资源管理器”中的项目目录下的“引用”,选择“添加引用”,打开“添加引用”对话框
2.在“添加引用”对话框中,选择“COM”>“Microsoft Word 15.0 Object Library”,点击“确定”按钮(这个版本号和本机安装的Word版本有关,2010是15.0)
3.相同操作打开“添加引用”对话框中,选择“浏览”项,查找到”Microsoft.Office.Interop.Word.dll”文件,选中它,点击“确定”按钮。
整个类的代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Microsoft.Office.Interop.Word;namespace DocCreator{ class CreateDoc { private Microsoft.Office.Interop.Word.Application wordApp = null; private Document wordDoc = null; public Application Application { get { return wordApp; } set { wordApp = value; } } public Document Document { get { return wordDoc; } set { wordDoc= value; } } //通过模板创建新文档 public void CreateNewDocument(string filePath) { killWinWordProcess(); wordApp = new Microsoft.Office.Interop.Word.ApplicationClass(); wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone; wordApp.Visible =false; object missing = System.Reflection.Missing.Value; object templateName = filePath; wordDoc = wordApp.Documents.Open(ref templateName,ref missing, ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,ref missing, ref missing,ref missing,ref missing,ref missing,ref missing); } //保存新文件 public void SaveDocument(string filePath) { object fileName = filePath; object format = WdSaveFormat.wdFormatDocument; //保存格式 object miss = System.Reflection.Missing.Value; wordDoc.SaveAs2(ref fileName,ref format,ref miss, ref miss,ref miss,ref miss,ref miss, ref miss,ref miss,ref miss,ref miss,ref miss,ref miss,ref miss,ref miss,ref miss,ref miss); object SaveChanges = WdSaveOptions.wdSaveChanges; object OriginalFormat = WdOriginalFormat.wdOriginalDocumentFormat; object RouteDocument =false; wordDoc.Close(ref SaveChanges, ref OriginalFormat, ref RouteDocument); wordApp.Quit(ref SaveChanges,ref OriginalFormat,ref RouteDocument); } //在书签处插入值 public bool InsertValue(string bookmark,string value) { object bkObj =bookmark; if(wordApp.ActiveDocument.Bookmarks.Exists(bookmark)) { wordApp.ActiveDocument.Bookmarks[bkObj].Select(); wordApp.Selection.TypeText(value); return true; } return false; } //插入表格,bookmark书签 public Table InsertTable(string bookmark, int rows, int columns,float width) { object miss =System.Reflection.Missing.Value; object toStart =bookmark; Range range =wordDoc.Bookmarks[toStart].Range;//表格插入位置 Table newTable =wordDoc.Tables.Add(range,rows, columns, ref miss, ref miss); //设置表的格式 newTable.Borders.Enable =1; //允许有边框,默认没有边框(为0时报错,1为实线边框,2、3为虚线边框,以后的数字没试过) newTable.Borders.OutsideLineWidth=WdLineWidth.wdLineWidth050pt;//边框宽度 if(width != 0) { newTable.PreferredWidth=width;//表格宽度 } newTable.AllowPageBreaks =false; return newTable; } //合并单元格 表名,开始行号,开始列号,结束行号,结束列号 public void MergeCell(Microsoft.Office.Interop.Word.Table table, int row1, int column1,int row2, int column2) { table.Cell(row1,column1).Merge(table.Cell(row2,column2)); } //设置表格内容对齐方式Align水平方向,Vertical垂直方向(左对齐,居中对齐,右对齐分别对应Align和Vertical的值为-1,0,1) public void SetParagraph_Table(Microsoft.Office.Interop.Word.Table table, int Align, int Vertical) { switch(Align) { case -1:table.Range.ParagraphFormat.Alignment=WdParagraphAlignment.wdAlignParagraphLeft;break;//左对齐 case 0: table.Range.ParagraphFormat.Alignment=WdParagraphAlignment.wdAlignParagraphCenter;break;//水平居中 case 1: table.Range.ParagraphFormat.Alignment=WdParagraphAlignment.wdAlignParagraphRight;break;//右对齐 } switch(Vertical) { case -1: table.Range.Cells.VerticalAlignment=WdCellVerticalAlignment.wdCellAlignVerticalTop;break;//顶端对齐 case 0: table.Range.Cells.VerticalAlignment=WdCellVerticalAlignment.wdCellAlignVerticalCenter;break;//垂直居中 case 1: table.Range.Cells.VerticalAlignment=WdCellVerticalAlignment.wdCellAlignVerticalBottom;break;//底端对齐 } } //设置表格字体 public void SetFont_Table(Microsoft.Office.Interop.Word.Table table, string fontName, double size) { if(size != 0) { table.Range.Font.Size =Convert.ToSingle(size); } if(fontName !="") { table.Range.Font.Name =fontName; } } //是否使用边框,n表格的序号,use是或否 public void UseBorder(int n,bool use) { if(use) { wordDoc.Content.Tables[n].Borders.Enable =1; //允许有边框,默认没有边框(为0时无边框,1为实线边框,2、3为虚线边框,以后的数字没试过) } else { wordDoc.Content.Tables[n].Borders.Enable =2; //允许有边框,默认没有边框(为0时无边框,1为实线边框,2、3为虚线边框,以后的数字没试过) } } //给表格插入一行,n表格的序号从1开始记 public void AddRow(int n) { object miss =System.Reflection.Missing.Value; wordDoc.Content.Tables[n].Rows.Add(ref miss); } //给表格添加一行 public void AddRow(Microsoft.Office.Interop.Word.Table table) { object miss =System.Reflection.Missing.Value; table.Rows.Add(ref miss); } //给表格插入rows行,n为表格的序号 public void AddRow(int n, int rows) { object miss =System.Reflection.Missing.Value; Microsoft.Office.Interop.Word.Table table = wordDoc.Content.Tables[n]; for(int i = 0; i < rows; i++) { table.Rows.Add(ref miss); } } //给表格中单元格插入元素,table所在表格,row行号,column列号,value插入的元素 public void InsertCell(Microsoft.Office.Interop.Word.Table table, int row, int column,string value) { table.Cell(row,column).Range.Text =value; } //给表格中单元格插入元素,n表格的序号从1开始记,row行号,column列号,value插入的元素 public void InsertCell(int n, int row,int column, string value) { wordDoc.Content.Tables[n].Cell(row,column).Range.Text =value; } //给表格插入一行数据,n为表格的序号,row行号,columns列数,values插入的值 public void InsertCell(int n, int row,int columns, string[] values) { Microsoft.Office.Interop.Word.Table table = wordDoc.Content.Tables[n]; for(int i = 0; i < columns; i++) { table.Cell(row,i + 1).Range.Text =values[i]; } } //插入图片 public void InsertPicture(string bookmark, string picturePath, float width, float hight) { object miss = System.Reflection.Missing.Value; object oStart =bookmark; Object linkToFile =false; //图片是否为外部链接 Object saveWithDocument =true; //图片是否随文档一起保存 object range =wordDoc.Bookmarks.get_Item(ref oStart).Range;//图片插入位置 wordDoc.InlineShapes.AddPicture(picturePath,ref linkToFile, ref saveWithDocument, ref range); wordDoc.Application.ActiveDocument.InlineShapes[1].Width=width; //设置图片宽度 wordDoc.Application.ActiveDocument.InlineShapes[1].Height=hight; //设置图片高度 } //插入一段文字,text为文字内容 public void InsertText(string bookmark, string text) { object oStart =bookmark; object range =wordDoc.Bookmarks.get_Item(ref oStart).Range; Paragraph wp =wordDoc.Content.Paragraphs.Add(ref range); wp.Format.SpaceBefore= 6; wp.Range.Text =text; wp.Format.SpaceAfter =24; wp.Range.InsertParagraphAfter(); wordDoc.Paragraphs.Last.Range.Text ="\n"; } //杀掉winword.exe进程 public void killWinWordProcess() { System.Diagnostics.Process[]processes=System.Diagnostics.Process.GetProcessesByName("WINWORD"); foreach (System.Diagnostics.Process process in processes) { bool b = process.MainWindowTitle==""; if (process.MainWindowTitle =="") { process.Kill(); } } } }}
经调试,编译器提示ApplicationClass()无法匹配接口,上网搜到解答,发现应该是Word兼容性问题。解决办法是点击解决方案中“引用”,选择Microsoft.Office.Interop.Word,选项中选择“嵌入式互操作类型”,将属性设定成FALSE,问题解决。
阅读全文
0 0
- C#操作Word2010实现
- POI操作word2010实现多级标题结构
- jacob1-17操作word2010
- Java读取操作word2003 word2007 word2010文档
- VC编程操作word2010生成表格
- C#实现异步操作
- C# 实现录音操作
- 用C# 实现拖放操作
- C#操作RSS 实现订阅
- c#实现单链表的操作
- C# WORD操作实现代码
- C# WORD操作实现代码
- C# WORD操作实现代码
- C#中实现拖放操作
- C# WORD操作实现代码
- C#下实现ping操作
- C# WORD操作实现代码
- C# WORD操作实现代码
- 插入排序
- 温故知新之从源码探析jsp运行原理
- Java GUI编程的几种常用布局管理器
- 开篇
- Java BIO NIO AIO 详解
- C#操作Word2010实现
- 两天了,这个问题一直没解决,求大神帮忙。之前没出现过,昨天突然出现这个问题
- 页面下button 的“disable”
- 【jzoj5334】【NOIP2017提高A组模拟8.24】【空】【扫描线】【set】
- DNS域名解析过程详解
- 自定义View之draw()与onDraw()方法
- 频道
- Maven
- linux mysql yum安装