C#动态生成WORD文档实现报表打印

更新时间:2024-02-01 作者:用户投稿原创标记本站原创 点赞:8527 浏览:33418

摘 要:信息管理系统中的报表有大量的打印需求,而报表直接进行打印存在着诸多限制,本文就在VisualStudio.NET环境下,使用C#动态生成报表对应的word文档,实现报表打印进行了介绍.

关 键 词:VisualStudio.NET;Oracle;Word;C#;报表;打印

中图分类号:TP311.52文献标识码:A文章编号:1674-7712(2014)12-0000-01

信息管理系统中各种信息的体现主要依靠各种报表,报表时常需要打印,但报表直接进行打印,效果往往不理想,而Office办公软件中的Word具有强大的打印功能,并且.NET环境也能与Office办公软件很好的结合起来,可以把报表动态生成为Word文档后再打印.

一、开发环境

后台数据库使用OracleDatabase11gR2,前台开发工具使用VisualC#.NET2010,调用的Word文档版本为MicrosoftOfficeWord2010.

二、配置Word

首先需要对Word进行一些权限的配置,这是必需的.配置方法如下:


(一)配置DCOMCNFG

1.单击“开始”|“运行”,打开“运行”对话框,输入DCOMCNFG,单击“确定”,打开“分布式COM配置属性”对话框.在该对话框中,定位到“应用程序”选项卡.

2.选中“MicrosoftWord文档”,单击“属性”,打开“MicrosoftWord文档属性”对话框,定位到“安全性”选项卡,选择“使用默认的访问权限”和“使用默认的启动权限”;然后定位到“身份标识”选项卡,在“要使用哪个用户帐户来运行该应用程序?”下选中“交互式用户”,单击“确定”;回到“分布式COM配置属性”对话框,“默认安全机制”选项卡,单击“默认访问权限”下的“编辑默认值”按钮,打开“注册表值的权限”对话框,添加下列用户:

SYSTEM

INTERACTIVE

Everyone

Administrators

IUSR_*

IWAM_*

每个用户的访问类型必须为“允许访问”.单击“确定”按钮,完成该“注册表值的权限”的设置.

3.单击“默认启动权限”下的“编辑默认值”添加相同的用户.每个用户的访问类型必须为“允许访问”.最后单击“确定”按钮,完成“分布式COM配置属性”的配置.

(二)添加怎么写作器的用户ASP.NET到Administrators组

右击“我的电脑”|“管理”|“本地用户和组”|“用户”,选中“ASPNET”,右击打开“ASPNET属性”对话框,定位到“隶属于”选项卡,在“隶属于”中加入“ADMINISTRATOR”.

(三)web.config设置

web.config文件需要加入以启用模拟身份,启用模拟身份后所有页面将会使用匿名Inter用户帐户(IUSR_machinename)这个用户名的权限执行.

三、报表动态生成Word文档

报表信息全部存储在Oracle数据表中,页面展示的报表是从数据表中读取的.把报表生成其对应的Word文档,也就是创建一个Word文档,把报表信息按相应的格式显示在Word文档里,其实质是创建一个Word文档,从数据表中读取报表信息后以报表形式显示在Word文档中.

(1)定义word文档的表头及形参;

(2)取得Word文件保存路径并以系统时间命名Word文档;

objectdstFileName等于@”d:\”+newname+”.docx”;

(3)定义一个名为wa的组件对象;

Word.ApplicationClasswa等于null;

if(wa等于等于null)

wa等于newWord.ApplicationClass();

if(wa!等于null)

wa.Visible等于true;

(4)创建一个名为wordDoc的文档对象:

missing等于System.Reflection.Missing.Value;

Word.DocumentwordDoc等于wa.Documents.Add(refmissing,refmissing,refmissing,refmissing);

(5)定义表头及表格格式.格式的定义比较自由,例如可以定义表头字体为“隶书”、字号为“18”、字体颜色为“蓝色”、表格位置为“居中”等等.

(6)根据报表格式添加表格.此时可根据报表格式在Word文档中规定生成相同行数和列数的表格,同时进行单元格的合并.

Word.Tabletable等于wordDoc.Tables.Add(wordDoc.Range(refstart,refend),5,2,refmissing,refmissing);

table.Cell(2,2).Merge(table.Cell(2,3));

(7)取得当前要打印报表的ID号链接数据库,读取数据表信息后显示在相应的位置;

(8)将wordDoc文档对象的内容保存为DOCX文档;

(9)关闭wordDoc文档对象;

(10)关闭wa组件对象.

本文提出的方法,实现了将一般的报表信息生成其对应word文档并自动保存,从而方便了报表信息的打印.该方法的灵活性和扩展性都很强,可以根据实际需要进行相应的修改以达到目的.