Spotfire 表可视化列宽度

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

有没有办法通过 Java 或 Python 脚本设置 Spotfire 表可视化列宽度。我可以手动更改列宽,但每当通过属性控制更改值时,它都会再次重置。我需要设置恒定的列宽。预先感谢。

width visualization spotfire
3个回答
2
投票
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

1
投票

好问题!你可以添加一个 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

0
投票

我必须从我的完整脚本中修改它,但这将使您尽可能接近“尺寸适合”,因为我知道如何。 我很快修改了这个,所以我可能在某个地方错过了一个变量,但是一旦你读完它,你就会得到代码。

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