如何使用Python更改Visio字体名称和颜色?

6
我正在使用Python 2.7与win32com.client,并尝试弄清如何更改Microsoft Visio 2013形状的字体名称和颜色。
下面的代码在已经打开的Visio文档上创建一个矩形形状。这段代码可以正常工作,并设置了形状的颜色、文本和线宽,没有任何问题。
import sys, win32com.client

visio = win32com.client.Dispatch("Visio.Application")

vsoShape1 = visio.ActivePage.DrawRectangle(1,1,2,2)
vsoShape1.Cells("LineColor").FormulaU = 0
vsoShape1.Cells("LineWeight").FormulaU = "2.0 pt"
vsoShape1.FillStyle = "None"
vsoShape1.Text = "This is a test"
vsoShape1.Cells("Char.size").FormulaU = "20 pt"

不同的方法都试过了,想要更改字体名称和颜色,但结果都是错误信息。
这两行代码都会导致以下错误信息:pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'Drawing4 - Visio Standard', u'\n\nUnexpected end of file.', None, 0, -2032466967), None)
vsoShape1.Cells("Font.Name").FormulaU = "Courier"
vsoShape1.Cells("Font.Bold").FormulaU = "True"

下面的三行代码都导致了类似的错误消息,但没有文件结尾错误: pywintypes.com_error: (-2147352567, '发生异常。', (0, u'绘图4 - Visio标准', u'\n\n名称?', None, 0, -2032466907), None)
vsoShape1.Cells("Char.Font").FormulaU = "Courier"
vsoShape1.Cells("Char.colorIndex").FormulaU = 16
vsoShape1.Cells("Font.Bold").FormulaU = 0

几次尝试后,结果是:无法设置DrawRectangle.xxxxx。
vsoShape1.fontName = "Courier"   
vsoShape1.Bold = True
vsoShape1.Bold = 1

发布后,我发现有一个类似的问题是关于如何在Excel中更改字体颜色,但我没有看到其他关于更改字体名称的问题。http://stackoverflow.com/questions/31708983/how-to-change-the-font-color-of-text-in-a-textbox-in-excel-using-python-in-win?rq=1 - John Bessire
2个回答

5

我看到你尝试了不同的方法使文本加粗,但没有成功。我找到了一个解决方案,并将其与其他样式选项一起发布。由于几乎没有清晰的文档,弄清它们所有的内容很烦人,所以我希望这能帮助某些人。

import win32com.client
from win32com.client import constants as vis

# gencache.EnsureDispatch will ensure constants are built
app = win32com.client.gencache.EnsureDispatch( 'Visio.Application' )

# hide the window if you want
#app.Visible = 0

shape = app.ActivePage.DrawRectangle(1,1,2,2)

# text in shape
shape.Text = 'Text'

# fill color of shape
shape.Cells( 'Fillforegnd' ).FormulaU = 'RGB(255,255,0)'

# shape without fill
shape.FillStyle = "None"

# color of border line
shape.Cells( 'LineColor' ).FormulaU = 'RGB(0,0,255)'

# shape without border line
shape.LineStyle = "None"

# line pattern, numbers for patterns can be looked up in visio, they are displayed in the pattern drop down
shape.Cells( 'LinePattern' ).FormulaU = '3'

# line weight
shape.Cells( 'LineWeight' ).FormulaU = '0.1'

# text color
shape.CellsSRC( vis.visSectionCharacter, 0, vis.visCharacterColor ).FormulaU = 'RGB(255,0,0)'

# size of text
shape.Cells( 'Char.size' ).FormulaU = '20 pt'

# vertical alignment of text, values are 0,1,2
shape.Cells( 'VerticalAlign' ).FormulaU = '1'

chars = shape.Characters

# here you can set which characters the following styles will be applied to
chars.Begin = 0
chars.End = chars.CharCount

# text bold, italic and underline styles, add to combine
chars.CharProps( vis.visCharacterStyle, vis.visBold + vis.visItalic + vis.visUnderLine )

# text strikethrough
chars.CharProps( vis.visCharacterStrikethru, True )

一个额外的提示:如何添加工具提示。我花了很长时间才发现你必须像在Excel中一样提供字符串作为公式。shape.CellsSRC(vis.visSectionObject, vis.visRowMisc, vis.visComment).FormulaU = '="Tooltip"' - daign
谢谢分享。你是否也成功创建了线条和圆形?如果是的话,能否将它们添加到列表中? - Stephen Ellwood

2

这将设置颜色和字体。

# Microsoft Office Visio Constants
visCharacterFont = 0
visCharacterColor = 1
visSectionCharacter = 3
visCharacterDblUnderline = 8
visSectionFirstComponent = 10

设置文本颜色

vsoShape.CellsSRC(visSectionCharacter, 0, visCharacterColor).FormulaU = "THEMEGUARD(RGB(0,0,0))"

设置字体

vsoShape.CellsSRC(visSectionCharacter, 0, visCharacterFont).FormulaU = 100

字体的编号被描述为“一个整数,表示系统上安装的字体集合中的索引。零(0)表示默认字体”。文档没有说明这个整数是否总是相同的,还是根据安装的字体而有所不同。我通过运行宏并查看VB脚本输出来获取了该数字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接