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

Tom*_*day 6 c# vb.net visio office-interop

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

有什么建议或修正吗?

在此输入图像描述

Imports Microsoft.Office.Interop.Visio
Imports System.Diagnostics.CodeAnalysis
Imports System.Runtime.InteropServices
Run Code Online (Sandbox Code Playgroud)

...

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
Run Code Online (Sandbox Code Playgroud)

Tom*_*day 1

因此,我找到了一个更好的以编程方式添加 visio 对象的演练,@JohnGoldsmith 在他对相关问题的其他一些答案中链接到了这些对象,并找到了创建模板和页面的更好方法,并且它正在工作!

Dim VisioApp As New Application

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

Dim TimelineStencilName As String = "TIMELN_M.VSS"
Dim TimelineStencilDoc As Document

For Each Doc As Document In VisioApp.Documents
    If Doc.Name = TimelineStencilName Then
        TimelineStencilDoc = Doc
        Exit For
    End If
Next

Dim TimelineMaster As Master =
    TimelineStencilDoc.Masters.ItemU("Block timeline")

Dim MilestoneMaster As Master =
    TimelineStencilDoc.Masters.ItemU("Line milestone")

Dim theTimeline As Shape
Dim theMilestone As Shape

theTimeline = myPage.Drop(TimelineMaster, 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)

theMilestone = myPage.Drop( _
    MilestoneMaster, _
    5.610236, 5.511811)

theMilestone.CellsU("User.visMilestoneDate").FormulaU = _
    VisioApp.ConvertResult(
        "10/1/2004", VisUnitCodes.visDate, VisUnitCodes.visInches)
Run Code Online (Sandbox Code Playgroud)