2016-04-21 43 views
1

我與波迪奧應用工作一個XLSX對象轉換爲CSV在Ruby中一個更合適的方法,和我做了一個小小的腳本來抓住從我波迪奧數據庫中的數據,並把在XLSX文件,並使用roo將其轉換爲csv。是否有使用波迪奧寶石

xlsx = Podio::Item.xlsx(<app_number>, options = {}) 

fname = "blah.xlsx" 

somefile = File.open(fname, "w") 
somefile.puts xlsx 
somefile.close 
xlsx_data = Roo:Spreadsheet.open(fname) 
csv = xlsx_data.to_csv 
puts csv 

所以這個工作,但打印到文件,只能再次獲取數據,並將其轉換爲CSV似乎...馬虎。有沒有辦法不把它打印到文件,把它放在一個變量,然後將其轉換爲CSV所以我不打印的文件?

我嘗試使用StringIO.new從波迪奧:: Item.xlsx輸出,但我得到了它作爲響應:

file = StringIO.new(xlsx) 

`extname': no implicit conversion of StringIO into String (TypeError) 

沒看到這事在波迪奧文檔:https://developers.podio.com/doc/items/get-items-as-xlsx-63233它剛纔提到如何導出XLSX文件,而不是做什麼用它做之後。

有什麼想法?通過creating temporary file

回答

2

Roo::Excelx假貨支持流。所以,你不會得到任何利潤,避免它,並通過StringIO實例吧。

我無法接受您收到的錯誤,但在Roo流支持是有點麻煩,我沒有直接加載流,從產生它:

StreamIO.new(File.read('/tmp/my_xlsx.xlsx')) 

在你的情況我會去與Tempfile實例,只是爲了代碼可讀性。

+0

將它視爲解決方案的工作!謝謝! – user1428649