1

我有从数据库中获取的数据,我想使用这些值来填充 visio 图表上形状的属性。我打开自己的模板,并毫无问题地在工作表上显示形状。我的服务器图标具有自定义属性,例如“制造商”、“网络”等。当我打印出每个形状的自定义属性时,我得到以下输出:

形状 = 服务器标签 = 制造商值 = 0

等等。这都是正确的,因为我还没有设置任何值。当我去设置值时,使用 Visio 2003 SDK (SettingACustomProperty.cs) 中的代码我得到一个错误,“这个形状没有通用名称为制造商的自定义属性” - 但清楚地打印出自定义属性显示它确实如此(就像在 Visio 中绘制形状后查看 shapeSheet 一样)。我已经插入了我如何调用 SettingACustomProperty。有人可以帮我弄清楚我需要做什么才能将值插入到形状上的自定义属性中吗?

这是我调用代码的方式(出于测试目的,我自己插入了字符串):

  string keyword = "Manufacturer";
  string manuValue = "\"Dell\"";

  string three = SettingACustomProperty.SetCustomPropertyFormula(visioStarShape, keyword, manuValue);
4

2 回答 2

2

Visio 自定义属性具有三个不同的概念,可以视为一个名称。

第一个是标签。这是您通常在用户界面中看到的内容,并且存储在 shapesheet 的自定义属性行中的标签单元格中。标签通常不用于以编程方式访问自定义属性。

第二个是行名。这是您在查看 shapesheet 中的自定义属性行时将看到的名称。它会出现在行中的其他单元格之前,并以“Prop”为前缀。这是使用自定义属性行的Name 属性通过自动机访问的。

最后的行名称是通用名称。通用名称的存在主要是为了允许代码通过名称查找特定的 Visio 对象,即使在对象本地化时更改了名称,即名称已被翻译。可以使用自定义属性行的NameU 属性访问通用名称。要了解有关通用名称的更多信息,请参阅使用通用名称和语法本地化您的 Visio 解决方案

当您调用 SetCustomPropertyFormula 时,第二个参数必须是通用名称。这是因为在内部 SetCustomPropertyFormula 使用get_CellsU,它使用行的通用名称查找自定义属性单元格。我怀疑您在调用 SetCustomPropertyFormula 时使用的是标签或行名称,而不是通用名称。

如果您使用的是标签,则需要切换到使用通用名称。

如果您使用的是该名称,则它不再与通用名称匹配。当您重命名行时,可能会发生这种情况。您可以找出通用名称,然后在您的代码中使用它。VBA 即时窗口通常是获取行的 NameU 属性的简单方法。或者,您可以更新形状或实例化它的母版以将 NameU 属性设置为等于 Name 属性,然后您将避免这种混淆(直到您重命名该行)。

于 2012-04-26T05:34:20.040 回答
1

凯西:你可以找出你需要使用的名字

Debug.Print visioStarShape.Section(visSectionProp).Row(0).NameU

添加“道具”。在此名称之前在您的代码中使用它。

或者,选择形状后,您可以通过单击开发人员工具箱中的此按钮来显示 ShapeSheet

显示 ShapeSheet 按钮

你会看到这样的东西。查找自定义属性部分,您可以在其中看到属性的标签和名称:

在此处输入图像描述

然后,您使用此名称来引用属性(即您的关键字字符串)。

keyword = """Prop.CustProp1"""

or....

keyword = "\"Prop.CustProp1"\"

不过,您不需要 SettingACustomProperty.cs 文件,因为您可以从 VBA 代码中引用形状工作表中的所有单元格。您可以在其中获取或设置公式。

看看这是否符合您的目的。这是我刚刚在 Office 技术中心发布的答案:http: //social.technet.microsoft.com/Forums/office/en-US/c837db4c-b90c-4500-b8ae-8d36efca44b6/can-i-apply-custom -property-sets-from-vba-in-visio-2003

由于我的系统是西班牙文,我通过猜测更改了模板和大师的名称。但重要的方法是 AddSection、AddNamedRow,尤其是对你来说 .Formula one(FormulaForce 是相同的,但它甚至适用于受 GUARD 函数保护的单元格)。

祝你好运。我爱上了 Visio 2003(但我希望我的公司购买了 Visio 2010):D

'Set the value for the property: vsoShape is an object referencing the shape
vsoShape.Cells("Prop.CustProp1").FormulaU = """Hello"""
vsoShape.Cells("Prop.CustProp2").FormulaU = 2556

CustProp1 的类型是字符串,CustProp2 的类型是数字。

问候,

于 2013-07-04T10:12:46.840 回答