gpt4 book ai didi

c# - 如何以编程方式将里程碑拖放到 Visio 中的 block 时间轴上

转载 作者:太空狗 更新时间:2023-10-29 21:45:51 30 4
gpt4 key购买 nike

我正在尝试使用 Visio 2010 COM Interops 以编程方式创建时间轴和标记。我的代码基于 Chris Castillo 的两部分博客文章(Part 1Part 2),这是我能够找到的关于如何执行此操作的唯一半完整示例。然而,他的博客(从 2004 年开始)似乎无法正常工作。里程碑并没有真正连接到时间轴,更新它们的日期并不能使它们移动到正确的位置。

有什么建议或修复吗?

enter image description here

Imports Microsoft.Office.Interop.Visio
Imports System.Diagnostics.CodeAnalysis
Imports System.Runtime.InteropServices

...

Dim VisioApp As New Application

Dim myDoc As Document = VisioApp.Documents.Add("")
Dim myPage As Page = myDoc.Pages.Item(1)

Dim TimelineStencils As Document =
VisioApp.Documents.Add("Timeline Shapes.vss")

Dim theTimeline As Shape
Dim theMilestone As Shape

VisioApp.AlertResponse = 1

theTimeline = myPage.Drop(
TimelineStencils.Masters.ItemU("Block timeline"), 5.610236, 5.511811)

theTimeline.CellsU("User.visBeginDate").FormulaU = _
VisioApp.ConvertResult(
"1/1/2004", VisUnitCodes.visDate, VisUnitCodes.visInches)

theTimeline.CellsU("User.visEndDate").FormulaU = _
VisioApp.ConvertResult(
"12/31/2004", VisUnitCodes.visDate, VisUnitCodes.visInches)

VisioApp.Addons("ts").Run("/cmd=3")

theMilestone = myPage.Drop( _
TimelineStencils.Masters.ItemU("Line milestone"), _
5.610236, 5.511811)

theMilestone.CellsU("User.visMilestoneDate").FormulaU = _
VisioApp.ConvertResult(
"7/1/2004", VisUnitCodes.visDate, VisUnitCodes.visInches)

VisioApp.AlertResponse = 0

最佳答案

在 Visio 2010 上针对内置模板(“TIMELN_M.VSS”)和模板运行 Chris 的代码,我发现它运行良好。但是,如果您针对带有空白文档的内置模板运行它,则不会显示描述和日期形状数据字段。这两个字段的可见性取决于 Document ShapeSheet 中的用户单元格(“User.visTLShowProps”)要么由插件添加,要么在删除其中一个主人时添加。

标准模板包含两个persistent events在插件中为 DocumentCreated 和 DocumentOpened 调用功能,并且再次添加几个其他用户单元格用于打开和关闭上述值,或者它们存在于模板中。在任何情况下,如果您不使用原始模板,这些都不会添加到文档 ShapeSheet。

这意味着您需要自己切换值。例如(一个快速的 VBA 示例):

Private Sub SetTlShowProps(ByRef vDoc As Visio.Document)
If (Not vDoc Is Nothing) Then
Dim docShp As Visio.Shape
Set docShp = vDoc.DocumentSheet
If (docShp.CellExistsU("User.visTLShowProps", 0)) Then
docShp.CellsU("User.visTLShowProps").FormulaU = 1
End If
End If
End Sub

或者,您当然可以将这些“推送”单元格添加到您自己的 ShapeSheet 文档模板中:

User.visTLShowPropsOn = SETF(GetRef(User.visTLShowProps),1)

User.visTLShowPropsOff = SETF(GetRef(User.visTLShowProps),0)

如果这不能解决您的问题,最后一点是,您是否使用了不同的或派生的模板(“Timeline Shapes.vss”)?

关于c# - 如何以编程方式将里程碑拖放到 Visio 中的 block 时间轴上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12588810/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com