使用书目
Word 对象模型包括多个用于自动创建书目的对象。 下表列出了 Word 书目功能的主对象。 使用这些对象以及 Word 对象模型中的其他属性和方法,将源添加到源列表、在文档中引用源以及管理源。 下表显示了用于管理书目源的 Word 模型中的对象。
Object | 说明 |
---|---|
源 | 单个源,如书籍、杂志文章或采访。 |
源 | Source 对象的集合。 |
Bibliography | 文档中所引用的源的列表(当前列表)或应用程序中可用源的列表(主列表)。 |
了解源 XML
源通过使用 XML 字符串以编程方式添加到源列表中。 根据要添加的源类型,所需的 XML 结构有所不同。 要确定源类型的 XML 结构,可以手动添加相同的源类型,然后查看返回的 XML 结构。 以下步骤描述了具体的操作方法。
在 "参考资料" 功能区上,单击 "管理源"。
在 "源管理器" 对话框中,单击 "新建"。
在 "创建源" 对话框中,选择要创建的源类型。 在本示例中,选择 "书籍"。
填写下表中所示的源域:
字段 值 作者 Andrew Dixon 标题 Stylish Bibliographies 年份 2006 市/县 Chicago 发行商 Adventure Works Press Tag name And01 通过选中 “显示所有书目字段”查看其他字段并向其添加信息。
单击“确定”。
关闭 "源管理器" 对话框。
(Alt+F11) 启动 Visual Basic 编辑器。
显示 "即时窗口"(Ctrl+G)。
粘贴并运行以下代码。
Sub GetBibliographyXML() Dim strXml As String Dim objSource As Source Set objSource = Application.Bibliography.Sources( _ Application.Bibliography.Sources.Count) Debug.Print objSource.XML End Sub
完成上述步骤之后,"即时窗口"中包含以下 XML 代码。
<b:Source xmlns:b="http://schemas.microsoft.com/office/word/2004/10/bibliography">
<b:Tag>And01</b:Tag>
<b:SourceType>Book</b:SourceType>
<b:Guid>{6D86D06C-9022-4932-8D4C-84C2B0843381}</b:Guid>
<b:LCID>0</b:LCID>
<b:Author>
<b:Author>
<b:NameList>
<b:Person>
<b:Last>Dixon</b:Last>
<b:First>Andrew</b:First>
</b:Person>
</b:NameList>
</b:Author>
</b:Author>
<b:Title>Stylish Bibliographies</b:Title>
<b:Year>2006</b:Year>
<b:City>Chicago</b:City>
<b:Publisher>Adventure Works Press</b:Publisher>
</b:Source>
Guid 和 LCID 元素为可选项,但如果需要,也可以为它们提供值。 Guid 元素值应当是有效的 GUID,可以在 Word 对象模型外以编程方式生成该值。 (有关以编程方式生成 ID 的信息,请参阅 MSDN 上的 Visual Studio 文档或 Windows 文档。) Word 在用户添加或编辑源时生成 GUID。 如果不向 XML 添加 GUID,并且用户随后编辑源,Word 将生成 GUID。 这样一来,Word 可以根据 GUID 的值确定哪个源是最近使用过的,并提示用户是否希望 Word 更新过期的源,以保持主列表和当前列表之间的连续性。
LCID 用于指定源的语言。 (请参阅 MSDN 了解有效的语言标识值。) Word 使用 LCID 了解如何在文档的书目中显示引用源。 例如,某个源可能采用法语撰写,另一个采用英语,还有一个采用日语。 Word 根据 LCID 决定如何显示姓名(如,英语的名和姓)、所用的标点符号(如,使用某种语言的逗号和另一种语言的冒号)以及所用的字符串(如,是使用“et al”还是使用其他本地化形式)。
删除可选元素后,可能具有类似于以下 XML 结构的结构。 (可以确定哪些元素是必需的,因为它们在 “创建源 ”对话框中没有相应的可编辑字段。省略一个或多个必需元素将引发运行时错误。)
<b:Source xmlns:b="http://schemas.microsoft.com/office/word/2004/10/bibliography">
<b:Tag>And01</b:Tag>
<b:SourceType></b:SourceType>
<b:Author>
<b:Author>
<b:NameList>
<b:Person>
<b:Last></b:Last>
<b:First></b:First>
</b:Person>
</b:NameList>
</b:Author>
</b:Author>
<b:Title></b:Title>
<b:Year></b:Year>
<b:City></b:City>
<b:Publisher></b:Publisher>
</b:Source>
有了书籍的源 XML 基本结构之后,便可以向主源列表和当前源列表添加其他书籍源。 可以通过选中 "显示所有书目域" 复选框来查找其他元素。
注意
或者,可以从位于 C:\Users\<user>\AppData\Roaming\Microsoft\Bibliography
的名为“sources.xml”的书目源文件中获取 XML。 该文件用于存储用户的主源列表。
将源添加到主源列表和当前源列表
向主源列表添加源与向当前源列表添加源十分类似,不同之处在于从不同的主对象访问 Sources 集合。 若要将源添加到主源列表,请从 Application 对象的书目属性访问 Sources 集合。 若要将源添加到当前源列表,请从 Document 对象的书目属性访问 Sources 集合。
以下示例使用之前确定的基本结构向主源列表添加其他书籍源。
Sub AddBibSource()
Dim strXml As String
strXml = "<b:Source xmlns:b=""http://schemas.microsoft.com/" & _
"office/word/2004/10/bibliography""><b:Tag>Mor01</b:Tag>" & _
"<b:SourceType>Book</b:SourceType><b:Author><b:Author>" & _
"<b:NameList><b:Person><b:Last>Hezi</b:Last>" & _
"<b:First>Mor</b:First></b:Person></b:NameList></b:Author>" & _
"</b:Author><b:Title>The New Office</b:Title>" & _
"<b:Year>2006</b:Year><b:City>Seattle</b:City>" & _
"<b:Publisher>Adventure Works Press</b:Publisher>" & _
"</b:Source>"
Application.Bibliography.Sources.Add strXml
End Sub
可以将行 Application.Bibliography.Sources.Add strXml
更改为 ActiveDocument.Bibliography.Sources.Add strXml
以编程方式在主源列表中插入源不会自动向当前源列表添加该源。 不过,要向文档添加引文,源必须列在当前源列表中。 可以使用 "源管理器" 对话框,手动将一个或多个源从主列表复制到当前列表中,或者以编程方式将一个或多个源从主列表复制到当前列表中。 以下示例将主源列表中的所有源复制到当前源中。 将源添加到当前列表中之后,可以在文档中插入这些源的引文。
Sub CopyToCurrentList()
Dim objSource As Source
Dim strXml As String
On Error Resume Next
For Each objSource In Application.Bibliography.Sources
strXml = objSource.XML
ActiveDocument.Bibliography.Sources.Add strXml
Next
End Sub
注意
[!注释] 对于当前列表中的源而言, Tag 属性的值必须唯一。 因此,必须要包括 On Error Resume Next
行,使代码跳过主列表中标记值与当前列表冲突的任何源。 可以修改此代码,以便当 Word 无法将源从主列表复制到当前列表时捕获实例。
共享源列表
您可能经常需要与组织中的其他人共享源列表。 将源添加到主列表时,Word 会将源添加到位于 的 C:\Users\<user>\AppData\Roaming\Microsoft\Bibliography\sources.xml
文件名“sources.xml”。 您可以与其他人共享该文件,方法如下:将该文件提供给其他用户,随后用户可以从 "源管理器" 对话框手动加载该文件,或通过代码以编程方式进行加载。
注意
当用户加载源文件时,这是一次性事件,不会更改现有主列表或其当前列表。 用户可以使用 "源管理器" 对话框,将共享源文件中的项手动添加到当前列表中。
可以通过编程方式加载共享源。 以下示例显示了如何加载位于本地计算机上共享目录中的共享源文件。
Sub LoadSharedSource()
Application.LoadMasterList "\\server\public\sources.xml"
End Sub
注意
[!注释] 共享 source.xml 源文件只共享主源列表中的源。 当前源列表中的源位于文档的数据存储区中。 可以通过保存文档,然后在文件压缩应用程序(如 WinZip)中打开生成的 DOCX 文件,来访问该文件。 可以在路径"customXml"下找到文件名为(或类似于)"item1.xml"的源文件。 如果需要与其他用户共享文档中的源,那么可以共享该文件,方式与上述共享主列表源文件的方式相同。
对主源列表进行排序
可以通过使用 BibliographySort 属性,在 "源管理器" 对话框中设置排序顺序。 BibliographySort 属性可以是"Author"、"Tag"、"Title"或"Year"的 字符串 值。 该对象不会改变文档书目中源的排序。 以下示例按标题对源进行排序。
Sub SortBibliography()
Options.BibliographySort = "Title"
End Sub
插入引文
可以通过使用 Fields 集合的 Add 方法插入书目引文。 以下示例在光标处插入之前添加的源的引文。 域的文本等于标记值或 Tag 元素的值,在此例中为“Mor01”。 (请参阅之前为 XML 字符串“b:Tag Mor01</b:Tag>>”<显示的 AddBibSource 子例程中的 XML 代码。) Tag 元素的值也对应于 Source 对象的 Tag 属性。
Sub InsertBibCitation()
Selection.Fields.Add Selection.Range, _
wdFieldCitation, "Mor01"
End Sub
应用书目样式
在文档中插入书目之后,可以设置书目样式。 Word 包含多种不同的书目样式。 可以使用 BibliographyStyle 属性来设置书目样式。 该属性可以是以下 字符串 值之一:
APA
Chicago
GB7714
GOST - 名称排序
GOST - 标题排序
ISO 690 - 第一个元素和日期
ISO 690 - 数值参考
MLA
SISTO2
Turabian
注意
这些值包含在 Word 中,但随着定义新的书目样式,将来的任何时间点都可能会添加新值。
以下示例将默认书目样式设置为 MLA 样式。
Sub SetBibliographyStyle()
Options.BibliographyStyle = "MLA"
End Sub
注意
[!注释] 还可以在 XML 中定义自己的文档样式。 C:\Program Files\Microsoft Office\Office15\1033\Bibliography\Style
目录包含计算机上每种文档样式的一个 XSL 文件。 请任意打开一个文件,以获取如何创建自己的 XSLT 的示例。 任何用户都可以将自定义书目样式 XSL 文件放在其计算机上的上述目录下,以共享该文件。
插入书目
与引文一样,书目也使用域。 要插入书目,需要用为域类型所指定的 wdFieldBibliography 常量插入域。 以下代码在活动文档的光标处插入一个书目。 本示例假设光标位于文档末尾或新的页面上。
Sub InsertBibliography()
Selection.Fields.Add Selection.Range, _
wdFieldBibliography
End Sub
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。