【问题标题】:Python pywin32 module Visio automationPython pywin32 模块 Visio 自动化
【发布时间】:2021-05-14 04:09:54
【问题描述】:

我有一个 Visio 模板,它有自己的模板(形状库)。想象一下,我有更多形状的模板;因此,我想删除模板 Visio 的模板,并想添加我的模板。 我在互联网上搜索了很多,但找不到解决方案。我可以简单地将我的形状添加到模板文档模具中,但是,我想使用 Python 来执行此操作,因为我想使事情自动化,并且在每个模板中我都不想这样做。

在 office VBA 页面中,我发现了这个,但无法在我的脚本中实现。 (添加基于模板和模板的文档对象。)

这里是链接:https://docs.microsoft.com/en-us/office/vba/api/visio.documents.add

Public Sub AddDocument_Example() 
 
 Dim vsoDocument As Visio.Document 
 
 'Add a Document object based on the Basic Diagram template. 
 Set vsoDocument = Documents.Add("Basic Diagram.vst") 
 
 'Add a Document object based on a drawing (creates a copy of the drawing). 
 Set vsoDocument = Documents.Add("Myfile.vsd ") 
 
 'Add a Document object based on a stencil (creates a copy of the stencil). 
 Set vsoDocument = Documents.Add("Basic Shapes.vss") 
 
 'Add a Document object based on no template. 
 Set vsoDocument = Documents.Add("") 
 
End Sub

我不知道删除当前模具是否会出现问题,因为模板 Visio 已经具有该模具的形状。

我乐于接受新的想法或解决方案。 如果你能帮助我,我将不胜感激。

我当前的代码:

import win32com.client

app = win32com.client.Dispatch("Visio.Application")
app.Visible = True

doc = app.Documents.Open("d:\\X.vsd") #Open template document 
custom_stencil = app.Documents.Add("d:\\custom_stencil.vssx") #Trying to add custom stencil

page = app.ActivePage

#Show the all items in stencil
for shape in doc.Masters:
    print(shape)

【问题讨论】:

    标签: python vba win32com visio stencils


    【解决方案1】:

    每个文档都有自己的母版。当您只打开一个模板文档时,它不会将该模板文档中的母版带入您的模板文档,它只是打开该模板文档(或者更准确地说,在您的代码中打开该模板的副本)。如果你做了这样的循环,可能你会看到大师:

    for shape in custom_stencil.Masters:
        print(shape)
    

    请注意,在执行 Office (Visio) 自动化时,python 不是常见的选择。您通常使用 VBA 来执行此操作。这可能是您找不到那么多样本的原因。

    这里我发布了几年前使用 python 创建形状的示例: Use .vss stencil file to generate shapes by python code (use .vdx?)

    【讨论】:

    • 感谢回复@Nikolay 因为我已经学习Python 6 个月了,现在它是我唯一的选择:( 所以,我的理解是,我应该每次都手动打开模板文档并使用它在当前文档中的形状。如果我在每个程序中都这样做,你预见到有什么问题吗?而且,我应该使用 OpenEx 打开这个模板模板对吗?
    • 打开方式没有区别。您也可以提前将您的母版复制到您的模板文档(例如手动),然后您根本不需要模板文档。您可以在“文档模板”窗口中查看文档中存在的母版,您可以在“开发者”选项卡(复选框)中将其打开。 VBA 真的很简单,它被设计得很简单。您可能可以在几天内完成。
    • 仅供参考:Visio Stencils、Masters 和 Shapes:它们之间有什么关系? experts-exchange.com/articles/2680/…(它还解释了“文档模板”是什么)
    • 感谢您的清晰解释。我完全理解大师,形状等的想法。我想我想我会继续使用 Python,直到我非常困难:) 我还搜索了学习 VBA 的过程,正如你所建议的那样,这似乎真的很容易。我还有一个问题要问你,我尝试了 OpenEx 并添加了常量“visOpenRO”和“visOpenDocked”;但是,我无法理解它们的影响,我删除了这些常量并重新运行,但似乎没有区别:(为了检查我的常量是否有效,我尝试了“visOpenHidden”,它运行良好。所以,“visOpenRO”和“ visOpenDocked ?
    • 顺便说一句,我试图评论你的帖子来问我上面写的问题,但我没有足够的代表发表评论,网站不允许我,因为我是新手 :( stackoverflow.com/questions/33488183/…
    猜你喜欢
    • 2021-08-04
    • 2013-01-21
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多