C# 动态生成word文档

C# 动态生成word文档,第1张

概述本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正。

本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正。

在工程中引用word的动态库

在项目中,点击项目名称右键-->管理NuGet程序包,打开NuGet包管理器窗口,进行搜索下载即可,如下图所示:

涉及知识点_Application: 表示word应用程序的接口,对应的实现类是Application类。_document:表示一个word文档,通过_Application对应的文档接口进行创建。Paragraph:表示一个段落,通过_document对象的相关方法进行创建。table:表示一个表格,通过_document对象的相关方法进行创建。Range:表示一个区域,可以是一个段落,也可以是一个表格,也可以是一个单元格,可以Range.select()将光标移动到当前区域。移动焦点:wordApp.Selection.MoveDown(ref wdline,ref ncount,ref oMissing);//移动焦点生成文档效果图

核心代码

  1 using Microsoft.Office.Interop.Word;  2  System;  3  System.Collections.Generic;  4  System.Data;  5  System.IO;  6  System.linq;  7  System.Reflection;  8  System.Text;  9  System.Threading.Tasks; 10  11 namespace ETWord 12 { 13     public class WordHelper 14     { 15         static voID CreateWordfile(string filePath) 16         { 17              18             try 19             { 20                 Createfile(filePath); 21                 // 22                 MessageFilter.Register(); 23                 object wdline = WdUnits.wdline; 24                 object oMissing = Missing.Value; 25                 object filename = filePath; 26                 object heading2 = WdBuiltinStyle.wdStyleheading2; 27                 object heading3 = WdBuiltinStyle.wdStyleheading3; 28                  29                 _Application wordApp = new Application(); 30                 wordApp.Visible = true; 31                 _document wordDoc = wordApp.documents.Open(ref filename,ref oMissing,1)">ref oMissing); 32                 System.Data.Datatable dtDepts = DatabaseHelper.getDept(); 33                 int ii = 0 34                 foreach (DaTarow dr in dtDepts.Rows) 35                 { 36                     string dept = dr["dept"].ToString(); 37                     Paragraph oPara0 = wordDoc.Content.Paragraphs.Add( 38                     oPara0.Range.Text = string.Format({0}-{1}",ii + 1,dept); 39                     //oPara0.Range.Font.Bold = 1; 40                     oPara0.Format.SpaceAfter = 5; 41                     oPara0.Range.Select(); 42                     oPara0.set_Style( heading2); 43                     oPara0.Range.InsertParagraphAfter(); 44                     System.Data.Datatable dtTemplate = DatabaseHelper.getTemplateByDept(dept); 45                     int jj =  46                     foreach (DaTarow dr1  dtTemplate.Rows) 47                     { 48                         string template = dr1[template 49                         string user1 = dr1[user1 50                         string remark = dr1[remark 51                         System.Data.Datatable dtData = DatabaseHelper.getDataByDeptAndTemplate(dept,template); 52                         int count = dtData.Rows.Count; 53                         int row = count + 4 54                         int column = 5 55                         object ncount =  56  57                         wordApp.Selection.MoveDown(ref wdline,1)">ref ncount,1)"> 58                         wordApp.Selection.TypeParagraph(); 59                         Paragraph oPara1 = wordDoc.Content.Paragraphs.Add( 60                         oPara1.Range.Select(); 61                         oPara1.Range.Text = {0}-{1}、{2}1,jj +  62                         oPara1.Range.Font.Bold = 1; 63                         oPara1.Format.SpaceAfter = 5; 64                         oPara1.set_Style( heading3); 65                         oPara1.Range.InsertParagraphAfter(); 66                         wordApp.Selection.MoveDown( 67  68                         设置表格 69                         table table = wordDoc.tables.Add(wordApp.Selection.Range,row,column,1)"> 70                         71                         table.borders.OutsIDelinestyle = Wdlinestyle.wdlinestyleSingle; 72                         table.borders.InsIDelinestyle = 73                         table.Range.Font.Bold =  74                         table.PreferreDWIDthType = WdPreferreDWIDthType.wdPreferreDWIDthauto; 75                         table.Columns[1].WIDth = 60f; 76                         table.Columns[2].WIDth = 100f; 77                         table.Columns[3].WIDth = 78                         table.Columns[4].WIDth = 79                         table.Columns[5].WIDth = 80                         列的合并 81                         Cell cell = table.Cell(2); 82                         cell.Merge(table.Cell()); 83                         Cell cell2 = table.Cell(2,1)"> 84                         cell2.Merge(table.Cell( 85                         Cell cell3 = table.Cell(3,1)"> 86                         cell3.Merge(table.Cell( 87                         赋值 88                         table.Cell(1).Range.Text = 流程名称: 89                         table.Cell(使用人: 90                         table.Cell(流程说明: 91                         table.Cell(4,1)">节点 92                         table.Cell(2).Range.Text = 节点名 93                         table.Cell(3).Range.Text = 处理人员 94                         table.Cell(4).Range.Text = 处理方式 95                         table.Cell(5).Range.Text = 跳转信息 96                         table.Cell(2).Range.Text = template; 97                         table.Cell( user1; 98                         table.Cell( remark; 99                         int kk = 100                         foreach (DaTarow dr2  dtData.Rows)101                         {102                             table.Cell(kk,1)">1).Range.Text = (kk - ).ToString();103                             table.Cell(kk,1)">2).Range.Text = dr2[Nodename104                             table.Cell(kk,1)">3).Range.Text = dr2[Doname105                             table.Cell(kk,1)">4).Range.Text = dr2[DoType106                             table.Cell(kk,1)">5).Range.Text = .Empty;107                             kk++108                         }109                         table.Cell(kk - ).Range.Select();110 111                         wordApp.Selection.MoveDown(ref oMissing);移动焦点112                         wordApp.Selection.TypeParagraph();插入段落113 114                         jj++115                     }116                     ii++117                 }118 119                 保存120                 wordDoc.Save();121                 wordDoc.Close(122                 wordApp.Quit(123                 MessageFilter.Revoke();124 125             }126             catch (Exception e)127 128                 Console.Writeline(e.Message);129                 Console.Writeline(e.StackTrace);130 131 132         }133 134         private voID Createfile(135 136             if (!file.Exists(filePath))137 138                 using (fileStream fs = file.Create(filePath))139 140 141 142 143 144     }145 }
VIEw Code关于word开发中字体大小

满足中文出版中使用字号作为字体大小的单位的需要,它允许用户同时使用“号”和 “磅”作为字体大小的单位。

磅值与字号之间的换算关系如下:

word中设置宽度时,采用磅为单位,磅与厘米之间的换算关系如下:

 

备注 插入多个表格时,表格容易嵌套,主要是由于往下移动的行数不对,后来通过选中表格右下角的单元格,将光标移动到表格右下角,然后再往下移动两行,即可解决表格嵌套的问题。单元格合并问题,当单元格合并时,单元格的位置也随之改变,如:水平方向第二,三两个单元格合并,则原来的第四个单元格的坐标就会变成第三个单元格。开发运行需要在电脑上安装office组件,或者也可以安装wps。

关于源码下载链接

总结

以上是内存溢出为你收集整理的C# 动态生成word文档全部内容,希望文章能够帮你解决C# 动态生成word文档所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1213803.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存