Spotfire手动选择表刷新并保存刷新记录

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)

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值