关于以图形方式显示数据 (Visio)
注意数据连接功能仅适用于Microsoft Visio 专业版 2013的许可用户。
Visio 中包括四个方面的数据连接:
- 连接至数据源
- 将形状链接至数据
- 以图形方式显示链接的数据
- 刷新已在数据源中更改的链接数据,更新链接形状,并解决可能引发的任何后续冲突
通常情况下,是按这些数据连接的列出顺序来对其进行访问的。也就是说,首先将 Visio 绘图连接到某数据源,然后将绘图中的形状链接到数据源中的数据,以图形方式显示链接形状中的数据,并在必要时刷新链接数据。 这些方面中的每一种在 Visio 对象模型中都有新的对象以及与其关联的成员。 本主题将介绍这些方面中的第一种,将 Visio 绘图连接到数据源。 有关其他数据连接的详细信息,请参阅下列主题:
若要以编程形式显示链接的数据,可使用 Visio API 进行数据显示,其中包括下列对象及其关联成员:
- GraphicItems 集合
- GraphicItem 对象
将 Visio 绘图中的形状链接到数据记录集中的行之后,可以通过编程方式以图形方式显示链接的数据。 例如,假设您的绘图包含多个数据链接形状,其中每一个形状都代表处于特定完成阶段的项目。 您可为形状数据的特定项(如项目完成百分比)关联一个进度栏。 然后,可以将进度栏应用于所选项目形状,并直观地显示每个项目的完成进度。
数据图形和图形项概述
为了更轻松地以图形方式显示数据,Visio 引入了数据图形的概念和一种称为数据图形母版的 Master 对象类型,该对象在 VisMasterTypes 枚举中由值 visTypeDataGraphic 表示。 若要将类型为 visTypeDataGraphic 的 Master 对象添加到 Masters 集合,必须使用 Masters.AddEx 方法。
Visio 包含多种类型的主控对象,其中包括主控形状。 当您创建主控形状实例时,它即成为形状。 Visio 还包括主控填充图案、主控线型和主控行尾,不过对于这几种主控对象不能创建实例。 您可以对形状应用这些主控对象以向形状赋予主控图案。 数据图形母版更像是模式母版,因为你不会创建它们的实例。 相反,您应如同应用主控线型和主控填充图案一样将其应用于形状。
数据图形主控形状与 Visio UI 内“数据图形”任务窗格中显示的数据图形相对应。 数据图形主控形状包含一个或多个图形项。 图形项是可用作现成可视组件的 Visio 形状,可以将其与形状数据关联,以便根据定义的规则在相对于形状的指定位置以图形方式显示数据。
Visio 提供了下列类型的图形项:
- 文本 将数据显示为标注中的文本,位于相对于形状的指定位置。
- 按值显示颜色 根据形状数据与特定值或值范围的比较,更改形状的颜色。
- 数据栏 使用条形图和图形在相对于形状的指定位置显示数据。
- 图标集 在相对于形状的指定位置显示一组表示数据值或条件的图标之一。
Visio 提供有许多已经填充了图形项的标准数据图形。 如果您希望向形状应用具有不同图形项组合的数据图形,则可创建自定义数据图形。 建议您使用 Visio UI 创建数据图形并向其添加图形项。
在 UI 中创建数据图形
- 在“数据”选项卡上,单击“数据图形”。
- 单击“新建数据图形”,然后在“新建数据图形”对话框中,单击“新建项目”。
- 在打开的对话框中,自定义该项,再使用相同方法添加自定义项。
您还可创建数据图形主控形状并以编程方式在其中填充现有的图形项。 不能以编程方式创建图形项,但是可自定义现有数据图形的行为。 此外,您可以使用代码更改图形项的行为和位置,以及更改用于定义各图形项如何显示数据的规则(称为表达式)。 表达式可以是 ShapeSheet 公式或其他任何合法的 ShapeSheet 表达式,也可以是形状数据(自定义属性)标签。 若要设置作为形状数据标签的表达式,必须将标签括在大括号 ({}) 中,然后将其作为 GraphicItem.SetExpression 方法的第二个 ( Expression) 参数传递。
在创建包含自定义的图形项组合的数据图形并定义这些图形项的行为之后,可以通过编程方式向数据链接形状应用该数据图形。
数据图形对象和成员
除了上一部分中所述的 visTypeDataGraphic 类型的 Master 对象之外,Visio 还在数据图形 API 中提供了下列对象及其关联成员:
- GraphicItems 集合
- GraphicItem 对象
除了这些专门与数据图形有关的对象及其成员之外,数据图形 API 还包含其他更为传统的 Visio 对象的多个成员。 例如, Shape.DataGraphic 和 Selection.DataGraphic 属性允许你分别将数据图形应用于形状和选定内容。 只读 Shape.IsDataGraphicCallout 属性指示特定形状是否在绘图中充当数据图形项。
向数据链接形状应用数据图形
以下示例说明如何使用 Selection.DataGraphic 属性向绘图中的所选形状应用您在 UI 中创建的现有自定义数据图形。 若要使此代码正常工作,现有的自定义数据图形必须命名为“MyCustomDataGraphic”。或者,可以将绘图中现有数据图形的名称替换为代码中的“MyCustomDataGraphic”。
Public Sub ApplyDataGraphic()
Dim vsoSelection As Visio.Selection
ActiveWindow.SelectAll
Set vsoSelection = ActiveWindow.Selection
Set vsoSelection.DataGraphic = ActiveDocument.Masters("MyCustomDataGraphic")
End Sub
自定义数据图形主控形状的行为
使用 Master.DataGraphicHidden 和 Master.DataGraphicHidesText 属性可自定义数据图形母版行为的某些方面。
DataGraphicHidden 属性用于确定数据图形主控形状是否显示在 Visio UI 的“数据图形”库中。 如果将给定主控形状的此属性的值设置为 True,该主控形状将不显示在库中的数据图形列表中。 该属性的默认值为 False。
DataGraphicsHidesText 属性用于确定应用数据图形主控形状是否隐藏它所应用到的形状(对于组合形状则应用于主形状)的文本。此属性的默认值也为 False。
GraphicItem.UseDataGraphicPosition 属性确定是否对图形项集合所属的数据图形主控形状的图形项使用当前默认标注位置。 visTypeDataGraphic 类型的 Master 对象的 GraphicItems 集合中图形项的默认标注位置由 Master.DataGraphicVerticalPosition 和 Master.DataGraphicHorizontalPosition 属性的设置指定。 如果 UseDataGraphicPosition 为 True,将根据默认设置放置图形项。 如果 UseDataGraphicPosition 为 False,则其位置由 Graphic Item.VerticalPosition 和 GraphicItem.HorizontalPosition 属性的设置决定。
此外,如果某个图形项的 HorizontalPosition 和 VerticalPosition 属性值等于 DataGraphicHorizontalPosition 和 DataGraphicVerticalPosition 属性值,则该图形项的 UseDataGraphicPosition 属性值将自动设置为 True。
但是,请注意,您可以通过使用数据图形的控制手柄手动重定位已应用于形状的数据图形。 通过这种方式设置的位置要比由属性设置指定的位置优先级高。
Master.DataGraphicShowBorder 属性确定是否在图形项周围显示边框,这些图形项位于相对于应用数据图形的形状的默认位置。 默认情况下,边框处于隐藏状态。
以编程方式组合数据图形
以下示例说明如何创建数据图形主控形状、向其添加现有图形项然后修改图形项。 该示例使用 Masters.AddEx 方法向当前文档的 Masters 集合添加一个新的数据图形主控形状。
然后,该示例使用 Master.Open 方法获取一个现有数据图形主控形状的副本,以进行编辑。 有关必须编辑主控形状副本而不是主控形状本身的原因的详细信息,请参阅 Open 方法。 接下来,它使用 GraphicItems.AddCopy 方法将现有图形项的副本添加到新主控形状的 GraphicItems 集合,并使用 GraphicItem.SetExpression 方法修改图形项表示的数据字段。 该示例还将设置 GraphicItem.PositionHorizontal 属性以修改该图形项相对于它所应用到的形状的水平位置。
最后,该示例将 Master.DataGraphicHidesText 属性设置为 True 以隐藏形状的文本并关闭主控形状的副本,这会将更改应用于此数据图形主控形状所应用到的现有形状。 然后,您即可向其他形状应用该新数据图形主控形状。
Public Sub AddNewDataGraphicMaster()
Dim vsoMaster As Visio.Master
Dim vsoMasterCopy As Visio.Master
Dim vsoMaster_Old As Visio.Master
Dim vsoGraphicItem As GraphicItem
Dim vsoGraphicItem_Old As Visio.GraphicItem
Set vsoMaster = ActiveDocument.Masters.AddEx(visTypeDataGraphic)
Set vsoMasterCopy = vsoMaster.Open
Set vsoMaster_Old = ActiveDocument.Masters("old_master_name")
Set vsoGraphicItem_Old = vsoMaster_Old.GraphicItems(1)
Set vsoGraphicItem = vsoMasterCopy.GraphicItems.AddCopy(vsoGraphicItem_Old)
vsoGraphicItem.SetExpression visGraphicExpression, "new_data_field_name"
vsoGraphicItem.PositionHorizontal = visGraphicLeft
vsoMasterCopy.DataGraphicHidesText = True;
vsoMasterCopy.Close
End Sub
上面的代码示例假定您知道包含您要添加到新主控形状的一个或多个图形项的现有数据图形主控形状的名称,以及您要添加到新主控形状的一个或多个图形项的 ID。 在“数据图形”任务窗格中,将鼠标移动到主控形状上方,便可确定现有数据图形主控形状的名称。 您还可通过循环访问当前文档中的 Masters 集合来确定主控形状的名称和 ID,如下面的代码所示。
For intCounter = 1 To ActiveDocument.Masters.Count
If ActiveDocument.Masters(intCounter).Type = visTypeDataGraphic Then
Debug.Print ActiveDocument.Masters(intCounter).Name, ActiveDocument.Masters(intCounter).ID
End If
Next
同样,可以循环访问主控形状的 GraphicItems 集合,以确定现有图形项的 ID 和 Tag 属性的值,如以下示例所示。 Tag 属性是 Visio 不使用的一个字符串。 默认情况下为空。 但是,您可设置其值以便于通过编程方式标识各图形项。
For intCounter = 1 To (vsoMaster_Old.GraphicItems.Count)
Debug.Print vsoMaster_Old.GraphicItems(intCounter).ID, oldMaster.GraphicItems(intCounter).Tag
Next
若要查看说明如何以编程方式自定义数据图形的代码示例,请下载 Visio SDK,然后参考其中的“示例代码库”。
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。