ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:262.58KB ,
资源ID:4591542      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4591542.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(word模板生成C#源码.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

word模板生成C#源码.docx

1、word模板生成C#源码Word模板生成C#源码Word标签生成doc模板:前段时间有项目要用c#生成Word格式的计算报告,通过网络查找到很多内容,但是都很凌乱,于是自己决定将具体的步骤总结整理出来,以便于更好的交流和以后相似问题可以迅速的解决! 现通过具体的示例演示具体的步骤:第一步,制作模板 1,新建一个文档,文档内容如下:图12,在相应位置插入书签;将鼠标定位到要插入书签的位置,点击“插入”“书签”,弹出对话框,输入书签名,点击“添加”按钮,书签位置如图3所示图2图33,保存模板,命名为“模板1.dot”或者“模板1.doc”图4第二步,设置项目中的引用 1,右击“解决方案资源管理器”

2、中的项目目录下的“引用”,选择“添加引用”,打开“添加引用”对话框图52,在“添加引用”对话框中,选择“COM”“Microsoft Word 11.0 Object Library”,点击“确定”按钮图6 3,相同操作打开“添加引用”对话框中,选择“浏览”项,查找到”Microsoft.Office.Interop.Word.dll”文件,选中它,点击“确定”按钮图7注意:此处要查找的“Microsoft.Office.Interop.Word.dll”版本必须为“11.*.*.*”,“*”代表数字第三步,编码这一步分成两个部分第一部分,Report类的编码这部分我已经封装好,为文件“Rep

3、ort.cs”,可以直接使用代码如下:(有比较详细的注释)using System;using System.Collections.Generic;using System.Text;using Microsoft.Office.Interop.Word;namespace MYNAMESPACE /这边需要换成自己的命名空间名 class Report private _Application wordApp = null; private _Document wordDoc = null; public _Application Application get return wordAp

4、p; set wordApp = value; public _Document Document get return wordDoc; set wordDoc = value; /通过模板创建新文档 public void CreateNewDocument(string filePath) killWinWordProcess(); wordApp = new ApplicationClass(); wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone; wordApp.Visible = false; object missing = Sy

5、stem.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, ref

6、missing); /保存新文件 public void SaveDocument(string filePath) object fileName = filePath; object format = WdSaveFormat.wdFormatDocument;/保存格式 object miss = System.Reflection.Missing.Value; wordDoc.SaveAs(ref fileName, ref format, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref

7、 miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss); /关闭wordDoc,wordApp对象 object SaveChanges = WdSaveOptions.wdSaveChanges; object OriginalFormat = WdOriginalFormat.wdOriginalDocumentFormat; object RouteDocument = false; wordDoc.Close(ref SaveChanges, ref OriginalFormat, ref RouteDocu

8、ment); 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.get_Item(ref bkObj).Select(); wordApp.Selection

9、.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 oStart = bookmark; Range range = wordDoc.Bookmarks.get_Item(ref oStart).Range;/表格插入位置 Table newTable = wor

10、dDoc.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;

11、 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

12、 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.wdAlignParagraphCent

13、er; 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 = WdCellVert

14、icalAlignment.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

15、.Size = Convert.ToSingle(size); if (fontName != ) table.Range.Font.Name = fontName; /是否使用边框,n表格的序号,use是或否 public void UseBorder(int n,bool use) if (use) wordDoc.Content.Tablesn.Borders.Enable = 1; /允许有边框,默认没有边框(为0时报错,1为实线边框,2、3为虚线边框,以后的数字没试过) else wordDoc.Content.Tablesn.Borders.Enable = 2; /允许有边框,默

16、认没有边框(为0时报错,1为实线边框,2、3为虚线边框,以后的数字没试过) /给表格插入一行,n表格的序号从1开始记 public void AddRow(int n) object miss = System.Reflection.Missing.Value; wordDoc.Content.Tablesn.Rows.Add(ref miss); /给表格添加一行 public void AddRow(Microsoft.Office.Interop.Word.Table table) object miss = System.Reflection.Missing.Value; table.

17、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.Tablesn; for (int i = 0; i rows; i+) table.Rows.Add(ref miss); /给表格中单元格插入元素,table所在表格,row行号,column列号,value插入的元素 publi

18、c 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.Tablesn.Cell(row, column).Ra

19、nge.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.Tablesn; for (int i = 0; i columns; i+) table.Cell(row, i + 1).Range.Text = valuesi; /插入图片 public void Insert

20、Picture(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;/图片插入位置 wordD

21、oc.InlineShapes.AddPicture(picturePath, ref linkToFile, ref saveWithDocument, ref range); wordDoc.Application.ActiveDocument.InlineShapes1.Width = width; /设置图片宽度 wordDoc.Application.ActiveDocument.InlineShapes1.Height = hight; /设置图片高度 /插入一段文字,text为文字内容 public void InsertText(string bookmark, string

22、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;

23、/ 杀掉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(); 第二部分,具体生成文档

24、的编码代码见下文:1,首先需要载入模板Report report = new Report();report.CreateNewDocument(TemPath); /模板路径2,插入一个值report.InsertValue(Bookmark_value, 世界杯);/在书签“Bookmark_value”处插入值3,创建一个表格Table table = report.InsertTable(Bookmark_table, 2, 3, 0); /在书签“Bookmark_table”处插入2行3列行宽最大的表4,合并单元格report.MergeCell(table, 1, 1, 1, 3

25、); /表名,开始行号,开始列号,结束行号,结束列号5,表格添加一行report.AddRow(table); /表名6,在单元格中插入值report.InsertCell(table, 2, 1, R2C1);/表名,行号,列号,值7,设置表格中文字的对齐方式report.SetParagraph_Table(table, -1, 0);/水平方向左对齐,垂直方向居中对齐8,设置表格字体report.SetFont_Table(table, 宋体, 9);/宋体9磅9,给现有的表格添加一行report.AddRow(1); /给模板中第一个表格添加一行10,确定现有的表格是否使用边框repo

26、rt.UseBorder(1, true); /模板中第一个表格使用实线边框11,给现有的表格添加多行report.AddRow(1, 2); /给模板中第一个表格插入2行12,给现有的表格插入一行数据string values= 英超, 意甲, 德甲, 西甲, 法甲 ;report.InsertCell(1, 2, 5, values); /给模板中第一个表格的第二行的5列分别插入数据12,插入图片string picturePath = C:Documents and SettingsAdministrator桌面1.jpg;report.InsertPicture(Bookmark_pi

27、cture, picturePath, 150, 150); /书签位置,图片路径,图片宽度,图片高度13,插入一段文字string text = 长期从事电脑操作者,应多吃一些新鲜的蔬菜和水果,同时增加维生素A、B1、C、E的摄入。为预防角膜干燥、眼干涩、视力下降、甚至出现夜盲等,电 脑操作者应多吃富含维生素A的食物,如豆制品、鱼、牛奶、核桃、青菜、大白菜、空心菜、西红柿及新鲜水果等。;report.InsertText(Bookmark_text, text);14,最后保存文档report.SaveDocument(RepPath); /文档路径第四步,运行程序生成文档,并查看生成的文档

28、自动生成的文档如下图测试中遇到的BUG1. 出现两个对话框,一个对话框提示“(前面省略)被呼叫方拒绝接收呼叫。(Exception from HRESULT:0x80010001 (RPC_E_CALL_REJECTED)”;另一个对话框提示“*(此处是模板文件名)”中的拼写或语法错误过多,无法继续显示。如果要检查此文档的拼写和语法,请选择“工具”菜单中的“拼写和语法”命令。”。分析原因:这可能是由于Word中有对英文的拼写和语法有自动检测的功能,而使某些字母组合被认为是语法错误。解决方案:选择“工具”菜单中的“拼写和语法”命令,将所有“不在词典中:”的红色字体“添加到词典”,如下图所示:注意:如果程序自动生成报告失败,那么程序中调用的模板的进程不会自动结束,需要在任务管理器中手动删除模板的进程“WINWORD.EXE”。测试环境操作系统:Windows XP sp3 语言:c# 编译器:Microsoft Visual Studio 2005 框架版本:Microsoft .NET Framework 2.0 Office版本:Microsoft Office 2003结束

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1