使用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
相关产品推荐
相关产品推荐

