Visio容器标题栏FillForegnd属性设置不生效问题排查与解决
Visio容器标题栏填充色设置失效的解决方法
问题现象
使用Python的win32com库控制Visio时,容器标题栏的填充色设置不再生效。执行设置代码后,形状表中的FillForegnd值显示正确,但标题栏始终保持默认白色;通过Visio图形界面却能正常修改标题栏填充色。
原失效代码
class Container(Shape): v_app: Application def __init__(self, caption: str, items: list, header_fill: str=None, font: Font=None) -> None: # 选中要放入容器的元素 window = self.v_app.app.ActiveWindow selection = window.Selection; selection.DeselectAll() for item in items: selection.Select(item.shape, 2) # visSelect = 2 # 添加并格式化容器 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()
隔离测试代码
为定位问题编写的独立测试程序,同样无法生效:
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
解决方案
Visio的容器是组合形状,标题栏是容器内部的子形状(索引为1的子元素)。直接修改容器主形状的填充色不会作用到标题栏,需要定位到标题栏子形状后再设置填充色:
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"
内容的提问来源于stack exchange,提问作者WV_Mapper
相关产品推荐
相关产品推荐

