У меня есть сценарий IronPython, который я использую для экспорта всех моих таблиц данных из проекта Spotfire.Экспорт данных из Spotfire в CSV с использованием скрипта IronPython
В настоящее время он работает отлично. Он перебирает все типы данных и экспортирует их как «.xlsx». Теперь мне нужно экспортировать файлы как «.csv», которые, как я думал, будут такими же простыми, как изменение «.xlsx» на «.csv».
Этот сценарий по-прежнему экспортирует файлы, называет их всеми .csv, но то, что находится внутри файла, является .xlsx, Im не уверен, как и почему. Код просто меняет имя расширения файла, но не конвертирует файл в csv.
Вот код, я в настоящее время с помощью:
Я отправил весь код в нижней части, и код, который я считаю, имеет отношение к моему вопросу в отдельном блоке кода в верхней части.
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 имеют разные записи.
Любая помощь приветствуется.
Полный сценарий показан ниже:
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.")
Спасибо, что облом, что Spotfire не экспортирует в формате CSV. STDF экспортируется быстро, но тогда мне пришлось бы пройти какую-то пакетную обработку для преобразования в csv. Что я уже имею в виду с xlsx .... Еще раз спасибо. – brandog