转载自:http://blog.csdn.net/fujie724/article/details/5443322

适合模板写入

今天正好有人问我,怎么生成一个报表式的Word文档。

就是文字的样式和位置相对固定不变,只是里面的内容从数据中读取。

我觉得类似这种的一般用第三方报表来做比较简便。但既然要求了Word,只好硬着头皮来。

网上的方法大多数都是从一个GridView或表中获得数据后向Word中添加一个表格。

但不方便实现下面的效果(图1)。(以下插图可能需要CSDN用户登录后才能看到)

(图1)



我们使用Word模板来实现,方法如下:

1、首先需要向工程中的“引用”加入Word类库的引用(图2)。我是Office 2003。其他版本可能略有不同。在COM里面。

(图2)

2、用Word设计一个模板文档(后缀名*.dot)。(图3)

(图3)

3、向模板中的需要显示动态内容的地方添加书签。具体方法是。光标落到欲插入内容的地方,选择菜单栏上的“插入”——〉“书签”(图4)

(图4)在“备注:”的后面添加一个书签,名字叫"beizhu"。书签名字不能以数字开头。

4、完成全部书签的添加,依次应该是:

位置 书签名
备注右侧 beizhu
姓名右侧单元格 name
性别右侧单元格 sex
生日右侧单元格 birthday
籍贯右侧单元格 hometown

5、保存这个已完成的模板到任意路径,例如 X:/template.dot

6、在工程的窗体的类中添加引用的命名空间

  1. using Word;

7、为了省事,直接在窗体的Load事件中加入以下代码。

  1. //**********************************************
  2. //来自博客http://blog.csdn.net/fujie724
  3. //**********************************************
  4. object oMissing = System.Reflection.Missing.Value;
  5. //创建一个Word应用程序实例
  6. Word._Application oWord= new Word.Application();
  7. //设置为不可见
  8. oWord.Visible = false;
  9. //模板文件地址,这里假设在X盘根目录
  10. object oTemplate = "X://template.dot";
  11. //以模板为基础生成文档
  12. Word._Document oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing);
  13. //声明书签数组
  14. object[] oBookMark = new object[];
  15. //赋值书签名
  16. oBookMark[] = "beizhu";
  17. oBookMark[] = "name";
  18. oBookMark[] = "sex";
  19. oBookMark[] = "birthday";
  20. oBookMark[] = "hometown";
  21. //赋值任意数据到书签的位置
  22. oDoc.Bookmarks.get_Item(ref oBookMark[]).Range.Text = "使用模板实现Word生成";
  23. oDoc.Bookmarks.get_Item(ref oBookMark[]).Range.Text = "李四";
  24. oDoc.Bookmarks.get_Item(ref oBookMark[]).Range.Text = "女";
  25. oDoc.Bookmarks.get_Item(ref oBookMark[]).Range.Text = "1987.06.07";
  26. oDoc.Bookmarks.get_Item(ref oBookMark[]).Range.Text = "贺州";
  27. //弹出保存文件对话框,保存生成的Word
  28. SaveFileDialog sfd = new SaveFileDialog();
  29. sfd.Filter = "Word Document(*.doc)|*.doc";
  30. sfd.DefaultExt = "Word Document(*.doc)|*.doc";
  31. if (sfd.ShowDialog() == DialogResult.OK)
  32. {
  33. object filename = sfd.FileName;
  34.  
  35. oDoc.SaveAs(ref filename, ref oMissing, ref oMissing, ref oMissing,
  36. ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
  37. ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
  38. ref oMissing, ref oMissing);
  39. oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
  40. //关闭word
  41. oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
  42. }

8、运行后直接弹出保存文件对话框(因为写在了Load事件里)。保存为Doc文档,打开发现效果如下(图5)

(图5)

至此,大功告成,文档中的内容正是我们所设定的。一个简单而又快捷的固定格式Word文档输出就完成了。

希望对需要的朋友有帮助。

以上完整教程为个人劳动成果,转载请注明出处。谢谢。

c#中操作word文档-一、模板方式写入的更多相关文章

  1. 2.QT中操作word文档

     Qt/Windows桌面版提供了ActiveQt框架,用以为Qt和ActiveX提供完美结合.ActiveQt由两个模块组成: A   QAxContainer模块允许我们使用COM对象并且可以 ...

  2. c#中操作word文档-四、对象模型

    转自:http://blog.csdn.net/ruby97/article/details/7406806 Word对象模型  (.Net Perspective) 本文主要针对在Visual St ...

  3. c#中操作word文档-三、MSDN文档

    这是关于word读写的MSDN内容,基本所有的方法都可以在这上面找到 https://msdn.microsoft.com/zh-cn/library/office/ff837519.aspx

  4. 通过c#操作word文档的其他方式

    如果不嫌麻烦可以选择MS的word组件,因为过于庞大复杂.一般都是在无法满足要求的情况下才采用此种方式 参考链接:http://blog.csdn.net/lu930124/article/detai ...

  5. C# 中使用Word文档对图像进行操作

    C# 中使用Word文档对图像进行操作 Download Files: ImageOperationsInWord.zip 简介 在这篇文章中我们可以学到在C#程序中使用一个Word文档对图像的各种操 ...

  6. 如何在程序中给word文档加上标和下标

    如何在程序中给word文档加上标和下标 上标或下标是一个小于普通行格式的数字,图形,标志或者指示通常它的设置与行相比偏上或偏下.下标通常显示于或者低于基准线,而上标则高于.上标和下标通常被用于表达公式 ...

  7. iText操作word文档总结

    操作word文档的工具有很多,除了iText之外还有POI,但是POI擅长的功能是操作excel,虽然也可以操作word,但是能力有限,而且还有很多的bug,技术并不成熟,下面就重点介绍一种操作wor ...

  8. C#操作Word文档(加密、解密、对应书签插入分页符)

    原文:C#操作Word文档(加密.解密.对应书签插入分页符) 最近做一个项目,客户要求对已经生成好的RTF文件中的内容进行分页显示,由于之前对这方面没有什么了解,后来在网上也找了相关的资料,并结合自己 ...

  9. Java文件操作系列[3]——使用jacob操作word文档

    Java对word文档的操作需要通过第三方组件实现,例如jacob.iText.POI和java2word等.jacob组件的功能最强大,可以操作word,Excel等格式的文件.该组件调用的的是操作 ...

随机推荐

  1. Nginx+Keepalived主主负载均衡服务器

    Nginx+keepalived主主负载均衡服务器测试实验环境: 主Nginx之一:192.168.11.27主Nginx之二:192.168.11.28Web服务器一:192.168.11.37We ...

  2. APKTool 提取APK文件的资源

    APK文件本身是一个压缩包,直接用解压工具即可打开,但里面的文件都已被编码为二进制文件格式,不能直接看,比如程序描述文件AndroidManifest.xml. 使用apktool工具可以将这些文件解 ...

  3. 利用python yielding创建协程将异步编程同步化

    转自:http://www.jackyshen.com/2015/05/21/async-operations-in-form-of-sync-programming-with-python-yiel ...

  4. iOS 模态视图

    模态视图不是专门的某个类,而是通过视图控制器的presentViewController方法弹出的视图,我们称为模态视图. 模态视图出现的场景一般是临时弹出的窗口,譬如:登录窗口: 模态视图弹出时通过 ...

  5. 关于litecoin莱特币挖矿、炒作的一点感想

    比特币早在一.二年前我就听说过这个词了,还自己试过搭设矿机,因为没找到显卡驱动,也没有人一起搞,所以中途放弃了. 后来就不断听说涨了多少倍,总想着都涨这么多了,错了也就错过了. 周二组会,一帮人兴起又 ...

  6. 一点点seo

    Search Engine Optimization(搜索引擎优化 ),是较为流行的网络营销方式. 主要目的是增加特定关键字的曝光率.有站外SEO和站内SEO.通过了解各类搜索引擎如何抓取互联网页面. ...

  7. JAVA面试题基础部分(三)

    20.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?抽象类中是否可以有静态的main方法? 接口可以继承接口.抽象类可以实现 ...

  8. 如何让 Drupal 使用 Wordpress 形式的编辑代码?

    如果你曾有过将 Wordpress 网站迁移到 Drupal 的经验,很可能客户会问的第一件事就是如何为 Drupal 添加编辑代码. Wordpress 中的 Shortcodes 插件让使用者可以 ...

  9. 慕课网-安卓工程师初养成-1-3 使用记事本编写Java程序

    来源:http://www.imooc.com/video/1501 step1: myProgram.java    源文件       使用记事本编辑 step2: compiler        ...

  10. awk中怎么比较字符串??

    awk -vOFS="_" '{print $1,$2,$3} http://bbs.chinaunix.net/thread-1099655-1-1.html