新生开学,各院系辅导员代领校园卡。需要打印一份领取卡的协议,协议模版固定,但各院系卡的数量不同。需要从excel表格中抽取数据往word文件中填,同事咨询是否可以用word中的邮件合并功能,心想有这功夫研究还不如自己写代码实现。一共三个问题:1)读取Excel表格数据,2)往word模板文件中写数据,3)生成word文件。

1)C#读取Excel文件中的数据:创建OleDb连接,将Excel作为数据源,读取至DataTable中,待使用

  1. private static DataSet LoadDataFromExcel(string filePath)
  2. {
  3. try
  4. {
  5. string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + filePath + ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'";
  6. OleDbConnection OleConn = new OleDbConnection(strConn);
  7. OleConn.Open();
  8. String sql = "SELECT * FROM [本科生$]"; //根据自己要读取的Excel中的Sheet改名字
  9.  
  10. OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
  11. DataSet OleDsExcle = new DataSet();
  12. OleDaExcel.Fill(OleDsExcle, "Sheet1");
  13. OleConn.Close();
  14. return OleDsExcle;
  15. }
  16. catch (Exception err)
  17. {
  18. MessageBox.Show("读取Excel数据失败:" + err.Message, "提示信息",
  19. MessageBoxButtons.OK, MessageBoxIcon.Information);
  20. return null;
  21. }
  22. }

2)创建好word的模版文件(.dot),并在需要动态写入数据的地方插入标签。

创建好如上图唆使的模板文档,保存为master.dot。接下来就开始写文件了,在这之前,先看看Excel表格内的数据结构是怎样的。如下图,我们只需要用到前四列的数据,往word文档中写入。院系标签的值由1、2两列合并构成,卡数量和卡套数量均取自校园卡数一列,报到证数量则取自报到证数列。

3)写数据并生成word文档,代码如下。需要在项目中引用Com组建,右键项目,“添加引用” --> “COM” --> “MicroSoft Office 15 Object Library”。

  1. private void button3_Click(object sender, EventArgs e)
  2. {
  3. System.Data.DataTable dt = new System.Data.DataTable();
  4. dt = LoadDataFromExcel(dataSourceText.Text.Trim()).Tables[];
  5. try
  6. {
  7. for (int i = ; i < dt.Rows.Count; i++)
  8. {
  9. object oMissing = System.Reflection.Missing.Value;
  10. //创建一个Word应用程序实例
  11. Microsoft.Office.Interop.Word._Application oWord = new Microsoft.Office.Interop.Word.Application();
  12. //设置为不可见
  13. oWord.Visible = false;
  14. //模板文件地址,这里假设在X盘根目录
  15. object oTemplate = dataDestinationText.Text.Trim();
  16. //以模板为基础生成文档
  17. Microsoft.Office.Interop.Word._Document oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing);
  18. //声明书签数组
  19. object[] oBookMark = new object[];
  20. //赋值书签名
  21. oBookMark[] = "department";
  22. oBookMark[] = "cardno";
  23. oBookMark[] = "cardskinno";
  24. oBookMark[] = "registration";
  25.  
  26. //赋值任意数据到书签的位置
  27. oDoc.Bookmarks.get_Item(ref oBookMark[]).Range.Text = dt.Rows[i][].ToString() + dt.Rows[i][].ToString();
  28. oDoc.Bookmarks.get_Item(ref oBookMark[]).Range.Text = dt.Rows[i][].ToString();
  29. oDoc.Bookmarks.get_Item(ref oBookMark[]).Range.Text = dt.Rows[i][].ToString();
  30. oDoc.Bookmarks.get_Item(ref oBookMark[]).Range.Text = dt.Rows[i][].ToString();
  31.  
  32. //设置文件保存路径
  33. string savePath = saveAsText.Text.Trim();
  34. object fileName;
  35. fileName = savePath + "\\" + dt.Rows[i][].ToString() + dt.Rows[i][].ToString();
  36. oDoc.SaveAs(ref fileName, ref oMissing, ref oMissing, ref oMissing,
  37. ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
  38. ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
  39. ref oMissing, ref oMissing);
  40. oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
  41. //关闭word
  42. oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
  43. }
  44. MessageBox.Show("生成文件完成!");
  45. }
  46. catch (Exception ex)
  47. {
  48. MessageBox.Show("错误,请截图发至xxxx" + ex.Message);
  49. }
  50. }

至此,构建了一个小小工具,以后再有这类工作,直接拿来使用,省事许多。

本文参考博客:http://blog.csdn.net/fujie724/article/details/5443322

C#依据word模版动态生成文档的更多相关文章

  1. StarUML配置Word生成文档模板

    来源:fasiondog 许多UML建模工具可以自动生成文档,让需求人员.开发人员专心于需求.设计的建模.当然为了能够生成符合自己要求的模板,需对建模时的目录结构(模型和包)有所规划和要求,否则很难生 ...

  2. Lodop生成文档式模版

    Lodop模版有两种方法,一种是传统的JS语句,可以用JS方法里的eval来执行,一种是文档式模版,是特殊格式的base64码,此篇博文介绍文档式模版的生成方法.两种模版都可以存入一下地方进行调用,比 ...

  3. doxygen的使用(一)配置并生成文档

    原创文章,欢迎阅读,禁止转载. doxygen是个好用的文档生成工具,他的强大功能有很多介绍,我就不说了.自带的chm帮助手册很全面,包括功能.注释规范.怎么配置.工具用法等.doxygen的用法共3 ...

  4. 利用PowerDesigner逆向工程导出PDM模型及生成文档

    原文:利用PowerDesigner逆向工程导出PDM模型及生成文档 最近需要对老项目进行重构优化,由于项目都是好几年前的,相关设计资料很不全,最基本的数据库设计文档都没有,只能利用PowerDesi ...

  5. API Studio 5.1.2 版本更新:加入全局搜索、支持批量测试API测试用例、读取代码注解生成文档支持Github与码云等

    最近在EOLINKER的开发任务繁重,许久在博客园没有更新产品动态了,经过这些日子,EOLINKER又有了长足的进步,增加了更多易用的功能,比如加入全局搜索.支持批量测试API测试用例.读取代码注解生 ...

  6. SpringBoot 集成Swagger2自动生成文档和导出成静态文件

    目录 1. 简介 2. 集成Swagger2 2.1 导入Swagger库 2.2 配置Swagger基本信息 2.3 使用Swagger注解 2.4 文档效果图 3. 常用注解介绍 4. Swagg ...

  7. 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)

    对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...

  8. 使用Ldoc给Lua生成文档

    Ldoc介绍 LDoc是一个Lua的文档生成工具,过去,比较常用的Lua生成文档的工具是LuaDoc,可惜作者自从2008年之后就再也没有发布过新的版本了,说明作者基本上已经放弃维护了.而LDoc则是 ...

  9. 使用PhpDocumentor生成文档

    一,网站根目录执行 $ composer require --dev phpdocumentor/phpdocumentor 二,进入vendor/bin/目录执行 $phpdoc -d D:\ser ...

随机推荐

  1. hibernate学习——Set集合配置

    Set集合的配置 数据表的创建:表关系一个员工拥有多个身份 create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VAR ...

  2. hibernate操作数据库总结

    这篇文章用于总结hibernate操作数据库的各种方法 一.query方式 1.hibernate使用原生态的sql语句执行数据库查询 有些时候有些开发人员总觉得用hql语句不踏实,程序出现了错误,就 ...

  3. Red Gate系列之六 SQL Test 1.0.12.3 Edition SQL测试工具 完全破解+使用教程

    原文:Red Gate系列之六 SQL Test 1.0.12.3 Edition SQL测试工具 完全破解+使用教程 Red Gate系列之六 SQL Test 1.0.12.3 Edition S ...

  4. UVa 825 - Walking on the Safe Side

    题目:在一个N*M的网格中,从左上角走到右下角,有一些点不能经过,求最短路的条数. 分析:dp,帕斯卡三角.每一个点最短的就是走N条向下,M条向右的路. 到达每一个点的路径条数为左边和上面的路径之和. ...

  5. 程序员之---C语言细节22(函数返回指针注意事项&lt;悬空指针&gt;、查看进程能够分配的内存大小)

    主要内容:函数返回指针注意事项<悬空指针>.查看进程能够分配的内存大小 #include <stdio.h> char * favorite_fruit() { static ...

  6. 【安卓笔记】高速的发展设置界面-----PreferenceActivity

    通常app都会有一个设置界面,例如以下: 通常做法是自定义布局,然后在代码里面加入响应函数,并将结果保存到Sharedpreferences中. android给我们提供了PreferenceActi ...

  7. DP:树DP

    The more, The Better Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  8. 活动图(Activity Diagram) - 项目分解文章

    案例基础上登录用户进行操作的每个模块. 1. 员 (1) 列车顺序表 (2) 货车装卸报告(数据处理) (3) 货车装卸报告(查看) 2. 管理员 (1) password管理 (2) 查看日志 (3 ...

  9. 高级项目 它 集群环境建设(两)MySQL簇

    最后博文我们介绍一下相关概念集群,今天我们要介绍的博文MySQL相关内容集群. 1.MySQL集群简单介绍 MySQL群集技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单个MyS ...

  10. rsync+inotify实现server实时备份

    inotify实现对文件夹下文件进行监听的原理: inotify集成到内核中,通过内核提供的接口.使用inotify作为第三方的软件对文件夹变化进行监控. inotifywait命令能够对文件夹中的文 ...