2

我正在使用 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 文件,而不是如何处理之后。

有什么想法吗?

4

1 回答 1

3

Roo::Excelx通过创建临时文件来伪造对流的支持。StringIO因此,避免它并将实例传递给它不会获得任何利润。

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

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

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

于 2016-04-21T06:48:13.107 回答