目前我找到的最好的导出 excel 的 gem,项目地址 https://github.com/cxn03651/write_xlsx.git 源码中还有很多 example 值得参考 示例:https://my.oschina.net/lovelyBoy/blog/834703
今天也刚使用了一个 excel 导出的 Gem,axlsx_rails https://github.com/straydogstudio/axlsx_rails
使用模版的方式来填写内容,模版扩展名.xlsx.axlsx
wb = xlsx_package.workbook
wb.add_worksheet(name: "Buttons") do |sheet|
@buttons.each do |button|
sheet.add_row [button.name, button.category, button.price]
end
end
我之前读 excel 文件都是用的 roo,印象中导出没有用过任何 gem,直接用 Office 的 Spreedsheet XML 格式,Railscasts 上也有示例,好处是直接就可以用 erb 模板了,虽然可能繁琐一点,但是胜在直观:
<?xml version="1.0"?>
<!- http://railscasts.com/episodes/362-exporting-csv-and-excel ->
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<Worksheet ss:Name="Sheet1">
<Table>
<Row>
<Cell><Data ss:Type="String">ID</Data></Cell>
<Cell><Data ss:Type="String">Name</Data></Cell>
<Cell><Data ss:Type="String">Release Date</Data></Cell>
<Cell><Data ss:Type="String">Price</Data></Cell>
</Row>
<% @products.each do |product| %>
<Row>
<Cell><Data ss:Type="Number"><%= product.id %></Data></Cell>
<Cell><Data ss:Type="String"><%= product.name %></Data></Cell>
<Cell><Data ss:Type="String"><%= product.released_on %></Data></Cell>
<Cell><Data ss:Type="Number"><%= product.price %></Data></Cell>
</Row>
<% end %>
</Table>
</Worksheet>
</Workbook>
更多介绍可以参考 Wikipedia 的内容: Microsoft Office XML formats: Excel XML Spreadsheet example
这种方式比较繁琐,代码量也多,输出的文件可能也更大(文本文件),需要开发者学习具体的标签跟类型等。但是可以拥有丰富的灵活性,比如样式跟单元格合并之类的,另外不需要任何额外依赖,适合对导出的表格有复杂的格式要求的场景吧。
今天无意看到这个讨论,于是贴上别人的技术旧文一篇,也许给伙伴们有些启迪: https://spin.atomicobject.com/2017/03/22/parsing-excel-files-ruby/