有没有办法通过 Java 或 Python 脚本设置 Spotfire 表可视化列宽度。我可以手动更改列宽,但每当通过属性控制更改值时,它都会再次重置。我需要设置恒定的列宽。预先感谢。
from Spotfire.Dxp.Application.Visuals import TablePlot
# Tab is the (Visualization) parameter passed to the script specify the table to work on
dataTable= Tab.As[TablePlot]().Data.DataTableReference
# Get a handle to the Table plot
table = Tab.As[TablePlot]()
# Get the ColumnCollection for the Table plot
columns = table.TableColumns
# Size all of the columns
for x in columns:
x.Width = 200
好问题!你可以添加一个 IronPython 脚本(我不相信使用 Javascript 可以做到这一点,除非你是某种巫师,或者讨厌自己:) 来非常简单地做到这一点。
我会将所有示例放在一个代码片段中,但显然您一次只想执行其中一个循环。该代码片段需要一个名为
viz
的参数,其值是您要修改的 TablePlot 可视化。
from Spotfire.Dxp.Application.Visuals import TablePlot
v = viz.As[TablePlot]()
# increase all column widths by 10 pixels
for col in v.Columns:
col.Width = col.Width + 10
# set all column widths to 100 pixels (the default value)
for col in v.Columns:
col.Width = 100
# set the width of a specific column to 50 pixels
for col in v.Columns:
if col.Name == "My Column":
col.Width = 50
我必须从我的完整脚本中修改它,但这将使您尽可能接近“尺寸适合”,因为我知道如何。 我很快修改了这个,所以我可能在某个地方错过了一个变量,但是一旦你读完它,你就会得到代码。
from Spotfire.Dxp.Application.Visuals import *
from Spotfire.Dxp.Data import DataValueCursor
from System.Drawing import *
def getPageByName(pgName):
for p in Document.Pages:
if p.Title == pgName:
return p
def getVis(pageName, visName):
page=getPageByName(pageName)
for visual in page.Visuals:
visualization = visual.As[Visualization]()
if visualization != None:
if isinstance(visualization, TablePlot):
if visualization.Title == visName:
vis=visualization
return vis
return None
#get visualisations
vis=getVis('xxx', "xxx")
font = vis.TableFont
dataTable=Document.Data.Tables[vis.Data.DataTableReference.Name]
mc = Document.Properties['mc']
pepCursor = DataValueCursor.CreateFormatted(dataTable.Columns["xxx"])
for x in dataTable.Columns:
try:
float(x.Name) #gets only numeric columns , non numeric get passed to catch
cn = x.Name
sz=0.0
myColCursor = DataValueCursor.CreateFormatted(dataTable.Columns[x.Name])
for row in dataTable.GetRows(myColCursor):
if myColCursor.IsCurrentValueValid and not myColCursor.CurrentValue == '(Empty)':
s = myColCursor.CurrentValue
sl = (float(str(Graphics.FromImage(Bitmap(1, 1)).MeasureString(s, font))[1:-1].split(",")[0].split("=")[1]))+20
sz = sz if sl < sz else sl
tc = vis.TableColumns.TryGetTableColumn(dataTable.Columns[x.Name])[1]
sz = sz if sz > 40 else 40
if float(x.Name) <= mc:
tc.Width = sz
except:
pass