Visio 容器 FillForegnd 未生效

问题描述 投票:0回答:1

我使用 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()

生成的形状表值看起来正确:

shapesheet

但是,标题填充并没有改变默认的白色。 如果我使用 Visio GUI,我能够成功更新填充颜色。

Container without header fill

我创建了一个独立的程序来将问题与我的代码库隔离:

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

短程序的输出: Output from short program

下面的代码解决了我的问题:

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"
python visio
1个回答
0
投票

解决方案如下。 感谢代孕者。

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"
© www.soinside.com 2019 - 2024. All rights reserved.