基于C#的Word 文档自动导出模块的设计与实现

时间:2022-05-28 08:29:54

基于C#的Word 文档自动导出模块的设计与实现

摘要:该文运用书签技术,在Microsoft .NET开发平台上利用C#语言实现Word文档的自动导出模块的设计。在试题库随机组卷抽卷系统中使用该模块,达到了比较满意的效果。

关键词:C#;Word文档;自动导出模块;书签

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)33-7449-04

1 概述

试题库随机组卷抽卷系统的核心功能就是自动生成试卷和答案,通过Word对象模型编程可以比较完善地实现不同要求的试卷格式的输出,采用灵活的组卷技术,可以大大减轻人工出卷的工作量。实现 Word 文档操作的程序设计语言有很多,文献[1]主要采用Delphi来实现。文献[2-4]是用VC++来实现的。文献[5-6]是用VBA来实现的,该文运用Word书签技术,使用C#语言实现Word文档的自动导出模块,探讨该模块设计与实现中的关键技术及其在试题库随机组卷抽卷系统应用。

2 Word自动化对象

2.1 Word对象模型

Word 提供了庞大而复杂的对象模型。如图1所示。

Word 对象模型中似乎有许多重叠。例如,Document 和 Selection 对象都是 Application 对象的成员,但是 Document 对象还是 Selection 对象的成员。Document 和 Selection 对象都包含 Bookmark 和 Range 对象。存在重叠是因为您可以通过多种方式来访问相同类型的对象。

2.2五种对象

Word对象模型的对象主要有五种类型,它们分别是Application 对象,Document 对象、Selection 对象、Range 对象和Bookmark对象。

1) Application 对象

Application 对象表示 Word 应用程序,是其他所有对象的父级。它的所有成员通常作为一个整体应用于Word。可以使用该对象的属性和方法来控制 Word 环境。

2) Document 对象

Document 对象是Word 编程的中枢。当打开文档或创建新文档时,就创建了新的Document 对象,该对象被添加到Word 的 Documents 集合中。焦点所在的文档叫做活动文档,由 Application 对象的 ActiveDocument 属性表示。

3) Selection 对象

Selection 对象表示当前选择的区域。在Word 用户界面中执行某项操作(例如,对文本进行加粗)时,应首先选择或突出显示文本,然后应用格式设置。Selection 对象始终存在于文档中。如果未选中任何对象,它表示插入点。此外,它也可以是不连续的多个文本块。

4) Range 对象

Range 对象表示文档中的一个连续的区域,由一个起始字符位置和一个结束字符位置定义。Range 对象的数量并不局限于一个。您可以在同一文档中定义多个 Range 对象。

5) Bookmark 对象

文档中的Bookmark 是控制文档中的文本的最容易的方法,在这一点上它类似于 Windows 窗体上的文本框控件。Bookmark 对象表示文档中同时具有起始位置和结束位置的连续区域。书签用于在文档中标记一个位置,或用作文档中的文本容器。Bookmark对象可以小到只有一个插入点,也可以大到整篇文档。Bookmark与Range对象的不同之处在于它可以在设计时命名书签,并且Bookmark对象随文档一起保存,因此当代码停止运行或文档关闭时,它不会被删除。

3 实现

在试题库随机组卷抽卷系统中所设计的试题本来有一定的格式,按.rtf格式保存为文件。在此基础上,在Word相应的位置插人书签(Bookmark),书签的作用是将程序中想要输出变量的值带入到模板中,模板中的书签名字一定要与程序中的一致。

3.1 模板

设计模板是为了避免反复输入相同的信息或做重复的格式修改。创建自定义模板的方法如下:新建一个空白的Word文档,在文档中添加相关信息,设置好要求的格式,将这些作为模板的静态文本。对于需要动态改变的部分,则在相应的位置插入书签,并设置书签变量。然后将所做的 Word 文档以 .dot 的形式保存。这样就完成了模板的创建。

3.2 C#程序通过模板自动创建word文档

第一步,制作模板

1) 新建一个文档

2) 在相应位置插入书签;将鼠标定位到要插入书签的位置,点击“插入”>“书签”,弹出对话框,输入书签名,点击“添加”按钮。

3) ,保存模板,命名为“试卷.dot”和“答案.dot”。

第二步,设置项目中的引用

1) 右击“解决方案资源管理器”中的项目目录下的“引用”,选择“添加引用”打开“添加引用”对话框。

2) 在“添加引用”对话框中,选择“COM”>“Microsoft Word 11.0 Object Library”,点击“确定”按钮。

3) 相同操作打开“添加引用”对话框,选择“浏览”项,查找到“Microsoft.Office.Interop.Word.dll”文件,选中它,点击“确定”按钮。

第三步,编码

这一步分为两个部分:

第一部分,Report编码。

第二部分,具体生成文档的编码。

1) 根据模板新建文档

private Document NewDoc(string DotStr)

{

Document Doc;

object objTemplate = (object)DotStr;

object objMissing = Missing.Value;

Doc = _App.Documents.Add(

ref objTemplate,

ref objMissing,

ref objMissing,

ref objMissing

);

return Doc;

}

2) 定位到书签

插入书签后,就可以通过操作插入点使光标从文档的其他位置跳转到书签标记的位置,这里将用到Selection对象的GoTo方法,代码如下:

private void GotoBookmark(Document Doc, string NameStr)

{

object objWhat = WdGoToItem.wdGoToBookmark; ;

object objWhich = WdGoToDirection.wdGoToPrevious;

object objMissing = Missing.Value;

object objName = (object)NameStr;

Doc.Bookmarks.get_Item(ref objName);

}

3) 在书签处插入值,可以分三种情况:插入单个值,插入多个值,插入文件。代码分别如下:

在书签处插入单个值:

public void InsertBookmarkValue(Document Doc, string NameStr, string ValueStr, string MsgStr)

{

Range rng;

object objName = (object)NameStr;

if (Doc.Bookmarks.Exists(NameStr))

{

rng = Doc.Bookmarks.get_Item(ref objName).Range; ;

rng.Text = ValueStr;

}

else

{

_Errors.Add( "无法写入:" + MsgStr);

}

}

在书签处插入多个值:

public void InsertBookmarkValue(Document Doc, string NameStr, ArrayList ValueArr, string MsgStr)

{

Range rng;

object objName = (object)NameStr;

if (Doc.Bookmarks.Exists(NameStr))

{

foreach (string s in ValueArr)

{

rng = Doc.Bookmarks.get_Item(ref objName).Range; ;

rng.Text = s;

}}

else

{

_Errors.Add("无法写入:" + MsgStr);

}}

在书签处插入文件:

public void InsertBookmarkFile(Document Doc, string NameStr, string FileNameStr, string MsgStr)

{

Range rng;

object objName = (object)NameStr;

object objMissing = Missing.Value;

if (Doc.Bookmarks.Exists(NameStr))

{

rng = Doc.Bookmarks.get_Item(ref objName).Range; ;

rng.InsertFile(

FileNameStr,

ref objMissing,

ref objMissing,

ref objMissing,

ref objMissing

);

}else

{

_Errors.Add("无法写入:" + MsgStr);

}}

4) 关闭文件

finally

{

_App.Quit(

ref objMissing, //SaveChanges

ref objMissing, //OriginalFormat

ref objMissing //RoutDocument

);

_App = null;

}

第四步,运行程序生成文档,并查看生成的文档。

4 小结

随着计算机技术的普及和发展,将上述 Word 文档自动导出模块应用于试题库随机组卷抽卷系统,实现 Word 文档格式的规范化,效果较理想。并按一定的原则规划和建设试题库,使用计算机软件系统管理试题库,保证了考试这一主要教学评价手段的科学性、规范性、可靠性和有效性,为提高教学质量,改进教学活动提供了有力支持。

参考文献:

[1] 鲁保玉,杨新芳.用Delphi生成Word报告及动态结构表格[J].计算机应用与软件,2007,24(3):180-183.

[2] 车晓波,王知学,王磊.在实现 Word自动化操作中书签的应用[J].信息技术,2013(8):148-150.

[3] 熊瑜容,柴毅,王淑娟.基于VC++的Word文档自动生成技术[J].Computer Era,2010(1):52-54.

[4] 李凌露.VC++开发文档自动化生成系统[J].中国电力教育,2007(1):219-221.

[5] 舒谷生.试题库基于Word标签定义试题的策略[J].湖南城市学院学报,2012,21(3):72-74.

[6] 刘东玉,尹照武,邱超. 基于Word VBA的文档规范化软件设计与实现.软件导刊[J].2008,7(11):25-27.

上一篇:基于.NET 技术与Excel 文件的工资条邮件系统的... 下一篇:基于Java语言的文件上传组件研究