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)
因此,我找到了一个更好的以编程方式添加 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)