首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用IronPython脚本将数据表从Spotfire导出到CSV

使用IronPython脚本将数据表从Spotfire导出到CSV
EN

Stack Overflow用户
提问于 2016-08-10 14:53:02
回答 1查看 5.3K关注 0票数 1

我有一个IronPython脚本,用于从Spotfire项目中导出我的所有数据表。

目前,它工作得很完美。它遍历所有数据表,并将它们导出为".xlsx“。现在我需要将文件导出为".csv“,我认为这和将".xlsx”更改为".csv“一样简单。

这个脚本仍然导出文件,将它们都命名为.csv,但文件中的内容是一个.xlsx,我不确定如何或为什么。代码只是更改文件扩展名,而不是将文件转换为csv。

下面是我目前使用的代码:

我已经在底部发布了完整的代码,而我认为与我的问题相关的代码在顶部的一个单独的代码块中。

代码语言:javascript
复制
if(dialogResult == DialogResult.Yes):
    for d in tableList: #cycles through the table list elements defined above
        writer = Document.Data.CreateDataWriter(DataWriterTypeIdentifiers.ExcelXlsDataWriter)
        table =  Document.Data.Tables[d[0]] #d[0] is the Data Table name in the Spotfire project (defined above)
        filtered = Document.ActiveFilteringSelectionReference.GetSelection(table).AsIndexSet() #OR pass the filter
        stream = File.OpenWrite(savePath+'\\'+ d[1] +".csv") #d[1] is the Excel alias name. You could also use d.Name to export with the Data Table name
        names = []
        for col in table.Columns: 
            names.append(col.Name)
        writer.Write(stream, table, filtered, names)
        stream.Close()

我想这可能和ExcelXlsDataWriter有关。我也尝试过使用ExcelXlsxDataWriter。有没有csv写入器可以用来做这件事?我相信csv和txt文件有不同的编写器。

任何帮助都是非常感谢的。

完整的脚本如下所示:

代码语言:javascript
复制
import System
import clr
import sys

clr.AddReference("System.Windows.Forms")
from sys import exit
from System.Windows.Forms import FolderBrowserDialog, MessageBox, MessageBoxButtons, DialogResult
from Spotfire.Dxp.Data.Export import DataWriterTypeIdentifiers
from System.IO import File, FileStream, FileMode

#This is a list of Data Tables and their Excel file names. You can see each referenced below as d[0] and d[1] respectively.
tableList = [
            ["TestTable1"],
            ["TestTable2"],
            ]

#imports the location of the file so that there is a default place to put the exports.
from Spotfire.Dxp.Application import DocumentMetadata
dmd = Application.DocumentMetadata #Get MetaData
path = str(dmd.LoadedFromFileName) #Get Path
savePath = '\\'.join(path.split('\\')[0:-1]) + "\\DataExports\\"

dialogResult = MessageBox.Show("The files will be save to "+savePath
                +". Do you want to change location?"
                , "Select the save location", MessageBoxButtons.YesNo)
if(dialogResult == DialogResult.Yes):
    # GETS THE FILE PATH FROM THE USER THROUGH A FILE DIALOG instead of using the file location
    SaveFile = FolderBrowserDialog()
    SaveFile.ShowDialog()
    savePath = SaveFile.SelectedPath

#message making sure that the user wants to exporthe files.
dialogResult = MessageBox.Show("Export Files."
                                +"  Export Files","Are you sure?", MessageBoxButtons.YesNo)
if(dialogResult == DialogResult.Yes):
    for d in tableList: #cycles through the table list elements defined above
        writer = Document.Data.CreateDataWriter(DataWriterTypeIdentifiers.ExcelXlsDataWriter)
        table =  Document.Data.Tables[d[0]] #d[0] is the Data Table name in the Spotfire project (defined above)
        filtered = Document.ActiveFilteringSelectionReference.GetSelection(table).AsIndexSet() #OR pass the filter
        stream = File.OpenWrite(savePath+'\\'+ d[1] +".csv") #d[1] is the Excel alias name. You could also use d.Name to export with the Data Table name
        names = []
        for col in table.Columns: 
            names.append(col.Name)
        writer.Write(stream, table, filtered, names)
        stream.Close()

#if the user doesn't want to export then he just gets a message
else:
    dialogResult = MessageBox.Show("ok.")
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38866223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档