You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python向Visio形状数据表传递字符串值失败(数值可正常传递)

使用Python向Visio形状数据表传递字符串值失败(数值可正常传递)

嗨,我来帮你搞定这个问题!你遇到的报错其实是Visio公式语法的小坑导致的,很容易解决~

问题根源

当你通过FormulaU给Visio的形状属性赋值时,本质是在传递Visio公式表达式:

  • 数值可以直接写(比如"=2.5"),Visio能直接识别为数值型公式;
  • 但字符串常量必须用双引号包裹,否则Visio会把"Test"当成无效的公式标识符,自然就报错了。

解决方案

修改设置字符串的那行代码,把目标字符串用双引号括起来,同时注意Python里的引号嵌套(两种写法都可以):

# 写法1:用三重双引号包裹,内部直接用双引号
shpObj2.CellsU("Prop.SiteName").FormulaU = """="Test""""

# 写法2:用转义双引号处理嵌套
shpObj2.CellsU("Prop.SiteName").FormulaU = "\"Test\""

修改后的完整可运行代码

我把你的代码调整成规范的Python格式,同时修复了字符串赋值的问题:

import win32com.client

appVisio = win32com.client.Dispatch("Visio.Application")
appVisio.Visible = 1

doc = appVisio.Documents.Add(r'C:\Users\anas\Visio\Input\Template.vsdx')
pagObj = doc.Pages.Item(1)
stnObj = appVisio.Documents("Oneweb.vssx")
mastObj = stnObj.Masters("NDC")

shpObj1 = pagObj.Drop(mastObj, 4.25, 5.5)
shpObj1.Text = "This is some text."
# 数值赋值正常运行
shpObj1.CellsU("Prop.SiteName").FormulaU = "=2.5"

shpObj2 = pagObj.Drop(mastObj, 2, 2)
shpObj2.Text = "This is some more text."
# 修复后的字符串赋值
shpObj2.CellsU("Prop.SiteName").FormulaU = """="Test""""

connectorMaster = appVisio.Application.ConnectorToolDataObject
connector = pagObj.Drop(connectorMaster, 0, 0)
connector.Cells("BeginX").GlueTo(shpObj1.Cells("PinX"))
connector.Cells("EndX").GlueTo(shpObj2.Cells("PinX"))

doc.SaveAs(r'C:\Users\anas\Visio\Output\MyDrawing.vsd')
doc.Close()

appVisio.Visible = 0
appVisio.Quit()

额外小提示

如果要传递的字符串本身包含双引号(比如He said "Hi"),记得在Visio公式里用两个双引号转义,写法如下:

shpObj2.CellsU("Prop.SiteName").FormulaU = """="He said ""Hi"""""""

另外可以确认下Visio模板里Prop.SiteName的属性类型是字符串型,如果是数值型的话,即使加了双引号也可能出现类型不匹配的问题哦~

备注:内容来源于stack exchange,提问作者Ana Varathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:03:00