热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用C#技术实现Word文档的动态生成与编辑

本文通过一个简单的示例,介绍了如何使用C#语言实现Word文档的动态生成与编辑功能。文章详细阐述了在项目中引用Word动态库的方法,并通过具体代码示例展示了如何创建和操作Word表格。此内容旨在为初学者提供参考和学习资料,欢迎读者提出宝贵意见和建议。

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

在工程中引用word的动态库

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

C# 动态生成word文档

涉及知识点

  1. _Application: 表示word应用程序的接口,对应的实现类是Application类。
  2. _Document:表示一个word文档,通过_Application对应的文档接口进行创建。
  3. Paragraph:表示一个段落,通过_Document对象的相关方法进行创建。
  4. Table:表示一个表格,通过_Document对象的相关方法进行创建。
  5. Range:表示一个区域,可以是一个段落,也可以是一个表格,也可以是一个单元格,可以Range.select()将光标移动到当前区域。
  6. 移动焦点:wordApp.Selection.MoveDown(ref wdLine, ref ncount, ref oMissing);//移动焦点

生成文档效果图

C# 动态生成word文档

核心代码

  1 using Microsoft.Office.Interop.Word;
  2 using System;
  3 using System.Collections.Generic;
  4 using System.Data;
  5 using System.IO;
  6 using System.Linq;
  7 using System.Reflection;
  8 using System.Text;
  9 using System.Threading.Tasks;
 10 
 11 namespace ETWord
 12 {
 13     public class WordHelper
 14     {
 15         public 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, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 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(ref oMissing);
 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(ref heading2);
 43                     oPara0.Range.InsertParagraphAfter();
 44                     System.Data.DataTable dtTemplate = DatabaseHelper.getTemplateByDept(dept);
 45                     int jj = 0;
 46                     foreach (DataRow dr1 in dtTemplate.Rows)
 47                     {
 48                         string template = dr1["template"].ToString();
 49                         string user1 = dr1["user1"].ToString();
 50                         string remark = dr1["remark"].ToString();
 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 = 1;
 56 
 57                         wordApp.Selection.MoveDown(ref wdLine, ref ncount, ref oMissing);
 58                         wordApp.Selection.TypeParagraph();
 59                         Paragraph oPara1 = wordDoc.Content.Paragraphs.Add(ref oMissing);
 60                         oPara1.Range.Select();
 61                         oPara1.Range.Text = string.Format("{0}-{1}、{2}", ii + 1, jj + 1, template);
 62                         //oPara1.Range.Font.Bold = 1;
 63                         //oPara1.Format.SpaceAfter = 5;
 64                         oPara1.set_Style(ref heading3);
 65                         oPara1.Range.InsertParagraphAfter();
 66                         wordApp.Selection.MoveDown(ref wdLine, ref ncount, ref oMissing);
 67                         wordApp.Selection.TypeParagraph();
 68                         //设置表格
 69                         Table table = wordDoc.Tables.Add(wordApp.Selection.Range, row, column, ref oMissing, ref oMissing);
 70                        
 71                         table.Borders.OutsideLineStyle = WdLineStyle.wdLineStyleSingle;
 72                         table.Borders.InsideLineStyle = WdLineStyle.wdLineStyleSingle;
 73                         table.Range.Font.Bold = 0;
 74                         table.PreferredWidthType = WdPreferredWidthType.wdPreferredWidthAuto;
 75                         table.Columns[1].Width = 60f;
 76                         table.Columns[2].Width = 100f;
 77                         table.Columns[3].Width = 100f;
 78                         table.Columns[4].Width = 60f;
 79                         table.Columns[5].Width = 100f;
 80                         //列的合并
 81                         Cell cell = table.Cell(1, 2);
 82                         cell.Merge(table.Cell(1, 5));
 83                         Cell cell2 = table.Cell(2, 2);
 84                         cell2.Merge(table.Cell(2, 5));
 85                         Cell cell3 = table.Cell(3, 2);
 86                         cell3.Merge(table.Cell(3, 5));
 87                         //赋值
 88                         table.Cell(1, 1).Range.Text = "流程名称:";
 89                         table.Cell(2, 1).Range.Text = "使用人:";
 90                         table.Cell(3, 1).Range.Text = "流程说明:";
 91                         table.Cell(4, 1).Range.Text = "节点";
 92                         table.Cell(4, 2).Range.Text = "节点名";
 93                         table.Cell(4, 3).Range.Text = "处理人员";
 94                         table.Cell(4, 4).Range.Text = "处理方式";
 95                         table.Cell(4, 5).Range.Text = "跳转信息";
 96                         table.Cell(1, 2).Range.Text = template;
 97                         table.Cell(2, 2).Range.Text = user1;
 98                         table.Cell(3, 2).Range.Text = remark;
 99                         int kk = 5;
100                         foreach (DataRow dr2 in dtData.Rows)
101                         {
102                             table.Cell(kk, 1).Range.Text = (kk - 4).ToString();
103                             table.Cell(kk, 2).Range.Text = dr2["NodeName"].ToString();
104                             table.Cell(kk, 3).Range.Text = dr2["DoName"].ToString();
105                             table.Cell(kk, 4).Range.Text = dr2["DoType"].ToString();
106                             table.Cell(kk, 5).Range.Text = string.Empty;
107                             kk++;
108                         }
109                         table.Cell(kk - 1, 5).Range.Select();
110 
111                         wordApp.Selection.MoveDown(ref wdLine, ref ncount, ref oMissing);//移动焦点
112                         wordApp.Selection.TypeParagraph();//插入段落
113 
114                         jj++;
115                     }
116                     ii++;
117                 }
118 
119                 //保存
120                 wordDoc.Save();
121                 wordDoc.Close(ref oMissing, ref oMissing, ref oMissing);
122                 wordApp.Quit(ref oMissing, ref oMissing, ref oMissing);
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 static void CreateFile(string filePath)
135         {
136             if (!File.Exists(filePath))
137             {
138                 using (FileStream fs = File.Create(filePath))
139                 {
140 
141                 }
142             }
143         }
144     }
145 }
View Code
推荐阅读
  • MySQL:不仅仅是数据库那么简单
    MySQL不仅是一款高效、可靠的数据库管理系统,它还具备丰富的功能和扩展性,支持多种存储引擎,适用于各种应用场景。从简单的网站开发到复杂的企业级应用,MySQL都能提供强大的数据管理和优化能力,满足不同用户的需求。其开源特性也促进了社区的活跃发展,为技术进步提供了持续动力。 ... [详细]
  • voc生成xml 代码
    目录 lxmlwindows安装 读取示例 可视化 生成示例 上面是代码,下面有调用示例 api调用代码,其实只有几行:这个生成代码也很简 ... [详细]
  • MySQL 数据操作:增、删、查、改全面解析
    MySQL 数据操作:增、删、查、改全面解析 ... [详细]
  • 计算 n 叉树中各节点子树的叶节点数量分析 ... [详细]
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 本课程详细介绍了如何使用Python Flask框架从零开始构建鱼书应用,涵盖高级编程技巧和实战项目。通过视频教学,学员将学习到Flask的高效用法,包括数据库事务处理和书籍交易模型的实现。特别感谢AI资源网提供的课程下载支持。 ... [详细]
  • 尽管存在唯一列,仍显示“当前选择不包含唯一列。网格编辑、复选框、编辑、复制和删除功能不可用”的消息。 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • 深入解析 Spring MVC 的核心原理与应用实践
    本文将详细探讨Spring MVC的核心原理及其实际应用,首先从配置web.xml文件入手,解析其在初始化过程中的关键作用,接着深入分析请求处理流程,包括控制器、视图解析器等组件的工作机制,并结合具体案例,展示如何高效利用Spring MVC进行开发,为读者提供全面的技术指导。 ... [详细]
  • 本文详细探讨了如何有效解决Oracle数据库中常见的ORA-01578和ORA-26040错误。这些错误通常与数据块损坏有关,严重影响数据库的稳定性和数据完整性。文章不仅提供了详细的故障诊断步骤,还介绍了多种修复方法,包括使用RMAN工具、手动修复数据块以及预防措施,以帮助数据库管理员高效应对这些问题。 ... [详细]
  • 表面缺陷检测数据集综述及GitHub开源项目推荐
    本文综述了表面缺陷检测领域的数据集,并推荐了多个GitHub上的开源项目。通过对现有文献和数据集的系统整理,为研究人员提供了全面的资源参考,有助于推动该领域的发展和技术进步。 ... [详细]
  • RancherOS 是由 Rancher Labs 开发的一款专为 Docker 设计的轻量级 Linux 发行版,提供了一个全面的 Docker 运行环境。其引导镜像仅 20MB,非常适合在资源受限的环境中部署。本文将详细介绍如何在 ESXi 虚拟化平台上安装和配置 RancherOS,帮助用户快速搭建高效、稳定的容器化应用环境。 ... [详细]
  • 本文深入探讨了 C# 中 `SqlCommand` 和 `SqlDataAdapter` 的核心差异及其应用场景。`SqlCommand` 主要用于执行单一的 SQL 命令,并通过 `DataReader` 获取结果,具有较高的执行效率,但灵活性较低。相比之下,`SqlDataAdapter` 则适用于复杂的数据操作,通过 `DataSet` 提供了更多的数据处理功能,如数据填充、更新和批量操作,更适合需要频繁数据交互的场景。 ... [详细]
  • 开发笔记:校园商铺系统中店铺注册功能模块的Controller层优化与重构
    开发笔记:校园商铺系统中店铺注册功能模块的Controller层优化与重构 ... [详细]
author-avatar
mobiledu2502874377
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有