2012-09-25 10 views
6

में ब्लॉक टाइमलाइन पर प्रोग्रामेटिक रूप से मील का पत्थर कैसे छोड़ूं, मैं प्रोग्रामियो रूप से Visio 2010 COM इंटरप्स का उपयोग करके टाइमलाइन और मार्कर बनाने की कोशिश कर रहा हूं। मेरा कोड क्रिस कैस्टिलो के 2 भाग ब्लॉग पोस्टिंग (Part 1, Part 2) पर आधारित है, जो एकमात्र अर्ध-पूर्ण उदाहरण है जिसे मैं यह कैसे करने में सक्षम हूं। हालांकि उनका ब्लॉग (2004 से) सही काम नहीं कर रहा है। मील का पत्थर वास्तव में समयरेखा से जुड़े नहीं हैं, और उनकी तिथि को अपडेट करने से उन्हें सही जगह पर जाने के लिए नहीं मिलता है।मैं Visio

कोई सुझाव या समाधान?

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 

उत्तर

2

तो मैं प्रोग्राम के रूप में विज़ियो वस्तुओं है कि संबंधित प्रश्नों के some of his other answers में से जुड़ा हुआ @JohnGoldsmith जोड़ने के much better walk-through पाया, और स्टेंसिल और पेज बनाने का एक बेहतर रास्ता मिल गया है, और यह काम कर रहा है!

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) 
+0

और जो भी इस सब के साथ संघर्ष कर रहा है, उसके लिए डेवलपर मोड चालू करने के निर्देश यहां दिए गए हैं, जो शेपशीट्स को सक्षम बनाता है http://www.visguy.com/2008/08/04/top-9-reasons-for-urning ऑन-डेवलपर मोड –

2

स्टेंसिल में बनाया ("TIMELN_M.VSS") और Visio 2010 को टेम्पलेट के खिलाफ 'क्रिस कोड चल रहा है मैंने पाया यह पूरी तरह से काम किया। यदि आप इसे रिक्त दस्तावेज़ के साथ निर्मित स्टैंसिल के विरुद्ध चलाते हैं, हालांकि, विवरण और दिनांक आकार डेटा फ़ील्ड प्रदर्शित नहीं होते हैं। इन दो क्षेत्रों की दृश्यता Document ShapeSheet में उपयोगकर्ता सेल ("User.visTLShowProps") पर निर्भर करती है जो या तो एडन द्वारा जोड़ा जाता है या जब किसी स्वामी को छोड़ दिया जाता है तो जोड़ा जाता है।

मानक टेम्पलेट में दो persistent events शामिल हैं जो दस्तावेज़ क्रिएटिव और दस्तावेज़ के लिए एडन में कार्यक्षमता कॉल करते हैं और फिर, या तो ये कुछ अन्य उपयोगकर्ता कोशिकाओं को जोड़ते हैं जिनका उपयोग ऊपर और बंद के मान को टॉगल करने के लिए किया जाता है, या वे मौजूद हैं टेम्पलेट में। यदि आप मूल टेम्पलेट का उपयोग नहीं कर रहे हैं, तो किसी भी मामले में, ये दस्तावेज़ आकारशीट में नहीं जोड़े गए हैं।

इसका मतलब है कि आपको मूल्य को टॉगल करने की आवश्यकता है। उदाहरण (एक त्वरित VBA उदाहरण) के लिए:

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

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

एक अंतिम बिंदु यदि:

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 में खुद दस्तावेज़ टेम्पलेट रहे हैं जोड़ सकते हैं यह आपकी समस्या का समाधान नहीं करता है, क्या आप एक अलग या व्युत्पन्न स्टैंसिल ("टाइमलाइन आकार। vss") का उपयोग कर रहे हैं?

+0

आपकी मदद जॉन के लिए धन्यवाद। जब आप क्रिस के कोड को चलाते थे और यह काम करता था, तो क्या यह एक स्टैंडअलोन एप्लिकेशन से था, या किसी प्रकार के वीबीए कंसोल में Visio के भीतर से? मैंने अपनी टाइमलाइन स्टैंसिल को "TIMELN_M.VSS" में बदल दिया, लेकिन मुझे अभी भी वही परिणाम मिल रहे हैं। मैं इस धारणा के तहत था कि वे वही थे। –

+0

इसके अलावा, क्या मैं कुछ ऐसा कर सकता हूं जो Dim MyDoc को दस्तावेज़ = VisioApp.Documents.Add ("") में बदल सकता है जो उस रिक्त दस्तावेज़ के बजाय टाइमलाइन दस्तावेज़ लोड करेगा? –

संबंधित मुद्दे