1.获取表名称,并存储在新表TableNames中
在文本区域新建按钮,绑定脚本get_table_names:
from datetime import datetime
from System.Collections import ArrayList
from System.IO import MemoryStream, SeekOrigin, StreamWriter
from Spotfire.Dxp.Data.Import import TextDataReaderSettings,TextFileDataSource
from Spotfire.Dxp.Application.Visuals import Visualization
from Spotfire.Dxp.Data import AddRowsSettings
tablenames = 'Tab_name'
for t in Document.Data.Tables:
if t.IsRefreshable and not t.Name in ("TableNames"):
tablenames += '\n{}'.format(t.Name)
#Document.Properties['tablenames'] = tablenames
def loaddata(dataTableName, Input, Split, Firstascolname, Generatetype):
if Input == "": return
mySelection = Input.split("\n")
stream = MemoryStream()
csvWriter = StreamWriter(stream)
#csvWriter.WriteLine("col0\r\n")
for ID in mySelection:
csvWriter.WriteLine(ID+"\r\n")
csvWriter.Flush()
settings = TextDataReaderSettings()
if not Split == "":
settings.Separator = Split
if Firstascolname == "是":
settings.AddColumnNameRow(0)
settings.ClearDataTypes(False)
stream.Seek(0, SeekOrigin.Begin)
datasource = TextFileDataSource(stream, settings)
if not Document.Data.Tables.Contains(dataTableName):
Document.Data.Tables.Add(dataTableName, datasource)
elif Generatetype == "增加":
rowsettings=AddRowsSettings(Document.Data.Tables[dataTableName],datasource)
Document.Data.Tables[dataTableName].AddRows(datasource,rowsettings)
else:
Document.Data.Tables[newTableName].ReplaceData(datasource)
newTableName = "TableNames"
Input = tablenames.strip()
Split = ";;"
Firstascolname = "是"
Generatetype = "替换"
loaddata(newTableName, Input, Split, Firstascolname, Generatetype)
print('generate table success')
点击该按钮将会获取当前模型中所有表名称(TableNames除外)并存储于表TableNames中
2.添加选择框(多选)
文本框添加“列表框(多个选择)”,新建列表属性(string list):tablenames,绑定列中的唯一值,选择表TableNames的列Tab_name
3.添加按需条件和按需表,本例为根据日期数量分别添加月、周、日、班次表
4.添加刷新按钮,绑定脚本refresh_multi:
需提前新建文本属性“refstate”,用于存储刷新纪录
from datetime import datetime
from System.Collections import ArrayList
tables = ArrayList()
table_choose = Document.Properties['tablenames']
tablename = ''
for t in Document.Data.Tables:
if t.IsRefreshable and t.Name in table_choose:
tables.Add(t)
tablename += '\n{}'.format(t.Name)
Document.Data.Tables.RefreshAsync(tables)
Document.Properties['refstate'] = '{}\n\n'.format(datetime.now().strftime('%Y-%m-%d %H:%M:%S')+'刷新以下表:'+tablename) + Document.Properties['refstate']
5.添加清空记录按钮,绑定脚本clear_record:
Document.Properties['refstate'] = ""
6.界面及测试结果如下:
7.其它刷新脚本
若只需刷新单个表,则只需简单一行脚本:
tab.Refresh()
#tab为脚本参数,选择需要刷新的数据表即可
若需要刷新所有表,则绑定如下脚本:
from System.Collections import ArrayList
tables = ArrayList()
for t in Document.Data.Tables:
if t.IsRefreshable:
tables.Add(t)
Document.Data.Tables.RefreshAsync(tables)