我使用 win32com 从 Python 控制 Visio,到目前为止总体效果良好。 最近更新我的代码后,容器标头填充不再生效。 我正在使用的代码:
class Container(Shape):
v_app: Application
def __init__(self, caption: str, items: list, header_fill: str=None, font: Font=None) -> None:
# select items for container:
window = self.v_app.app.ActiveWindow
selection = window.Selection; selection.DeselectAll()
for item in items:
selection.Select(item.shape, 2) # visSelect = 2
# drop and format container:
self.shape = self.v_app.page.DropContainer(self.v_app.doc.Masters.ItemU("Classic"), selection)
super().__init__(self.shape)
self.shape.Text = caption
if font:
self.set_font(font)
else:
self.set_font(self.v_app.font4)
if header_fill:
self.shape.Cells("FillForegnd").FormulaForceU = header_fill
self.shape.ContainerProperties.FitToContents()
生成的形状表值看起来正确:
但是,标题填充并没有改变默认的白色。 如果我使用 Visio GUI,我能够成功更新填充颜色。
我创建了一个独立的程序来将问题与我的代码库隔离:
import win32com.client as w32
app = w32.Dispatch("Visio.Application")
app.Window.SetWindowRect(10, 10, 2000, 1000)
doc = app.Documents.Open(r"C:\Users\hankb\OneDrive\Documents\Python\projects\visio_test\junk.vsdx")
# doc = app.Documents.Add("junk.vsdx")
page = doc.Pages.Add()
b1 = page.DrawRectangle(1, 5, 2, 4.5); b1.Text = "Box 1"
b2 = page.DrawRectangle(1, 4, 2, 3.5); b2.Text = "Box 2"
win = app.ActiveWindow
sel = win.Selection
sel.Select(b1, 2)
sel.Select(b2, 2)
con = page.DropContainer(doc.Masters.ItemU("Classic"), sel)
con.Cells("FillForegnd").FormulaForceU = "RGB(189, 215, 238)" # RGB(0,255,0)"
con.Text = "Container"
pass
下面的代码解决了我的问题:
con = page.DropContainer(stencil.Masters.ItemU("Classic"), sel)
con_header = con.Shapes[1]
con_header.Cells("FillForegnd").FormulaForceU = "RGB(189, 215, 238)"
con.Text = "Container"
解决方案如下。 感谢代孕者。
con = page.DropContainer(stencil.Masters.ItemU("Classic"), sel)
con_header = con.Shapes[1]
con_header.Cells("FillForegnd").FormulaForceU = "RGB(189, 215, 238)"
con.Text = "Container"