Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Visio中以编程方式将里程碑拖放到块时间线上_C#_Vb.net_Office Interop_Visio - Fatal编程技术网

C# 如何在Visio中以编程方式将里程碑拖放到块时间线上

C# 如何在Visio中以编程方式将里程碑拖放到块时间线上,c#,vb.net,office-interop,visio,C#,Vb.net,Office Interop,Visio,我正在尝试使用Visio2010 COM互操作系统以编程方式创建时间线和标记。我的代码基于Chris Castillo的两篇博文(,),这是我能找到的关于如何做到这一点的唯一半完整示例。然而,他的博客(从2004年开始)似乎并不正常。里程碑与时间线没有真正的联系,更新它们的日期并不能让它们移动到正确的位置 有什么建议或修正吗 Imports Microsoft.Office.Interop.Visio Imports System.Diagnostics.CodeAnalysis Imports

我正在尝试使用Visio2010 COM互操作系统以编程方式创建时间线和标记。我的代码基于Chris Castillo的两篇博文(,),这是我能找到的关于如何做到这一点的唯一半完整示例。然而,他的博客(从2004年开始)似乎并不正常。里程碑与时间线没有真正的联系,更新它们的日期并不能让它们移动到正确的位置

有什么建议或修正吗

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


在Visio2010上运行Chris针对内置模板(“TIMELN_M.VSS”)和模板的代码时,我发现它工作得非常好。但是,如果使用空白文档在内置模具上运行,则不会显示“说明”和“日期形状”数据字段。这两个字段的可见性取决于中的用户单元格(“User.visTLShowProps”),该单元格由加载项添加或在删除其中一个主控项时添加

标准模板包含两个调用DocumentCreated和DocumentOpened插件中的功能,或者添加两个用于打开和关闭上述值的其他用户单元格,或者它们存在于模板中。在任何情况下,如果未使用原始模板,则不会将其添加到文档形状表中

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

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

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

User.visTLShowPropsOff = SETF(GetRef(User.visTLShowProps),0)
如果这不能解决您的问题,最后一点是,您是否使用了不同的或派生的模具(“Timeline Shapes.vss”)?

因此我找到了一个以编程方式将@JohnGoldsmith链接到的visio对象添加到相关问题的方法,并找到了一种更好的创建模具和页面的方法,而且它正在工作

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)

谢谢你的帮助,约翰。当您运行Chris的代码并运行时,它是来自一个独立的应用程序,还是来自某种VBA控制台中的Visio?我将时间线模板更改为“TIMELN_M.VSS”,但仍然得到相同的结果。我觉得它们是一样的。另外,我是否可以将Dim myDoc更改为Document=visiapp.Documents。添加(“”)以加载时间线文档而不是空白文档?对于所有正在努力解决这些问题的人,下面是关于启用ShapeSheets的开发人员模式的说明
User.visTLShowPropsOn = SETF(GetRef(User.visTLShowProps),1)

User.visTLShowPropsOff = SETF(GetRef(User.visTLShowProps),0)
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)