有没有更简洁的方法使用podio gem将xlsx对象转换为Ruby中的csv

时间:2016-04-21 02:16:11

标签: ruby file csv io podio

我正在使用Podio应用程序,我制作了一个小小的脚本来从我的Podio数据库中获取数据并放入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用于Podio :: Item.xlsx的输出,但我得到了这个作为回复:

file = StringIO.new(xlsx)

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

在Podio文档中没有看到任何相关内容:https://developers.podio.com/doc/items/get-items-as-xlsx-63233它刚刚提到了如何导出xlsx文件,而不是之后如何处理它。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

Roo::Excelx假设creating temporary file对流提供支持。因此,您不会获得任何利益,并将StringIO实例传递给它。

我无法收到您收到的错误,但Roo中的流支持有点麻烦,我无法直接加载流,从而产生:

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

在你的情况下,我会使用Tempfile实例,只是为了代码可读性。