Ruby 功能强大的导出 excel 的 gem:write_xlsx

TroyWind · 2017年02月09日 · 最后由 bkbabydp 回复于 2019年12月27日 · 5070 次阅读

目前我找到的最好的导出 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

反正之前为了折腾格式什么的。。。。也找了好多。 当时用了spreadsheet 还有另外一个简单的 roo-xls

这类工具还是蛮多的

我之前读 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

这种方式比较繁琐,代码量也多,输出的文件可能也更大(文本文件),需要开发者学习具体的标签跟类型等。但是可以拥有丰富的灵活性,比如样式跟单元格合并之类的,另外不需要任何额外依赖,适合对导出的表格有复杂的格式要求的场景吧。

#5 楼 @martin91 这个思路很赞啊, 格式和样式复杂的 excel, 用命令式语法来拼, 太蛋疼了.

马克下。以前都是用 spreadsheet 和 roo 来直接写,处理计算啥的全靠语法来标记。。

今天无意看到这个讨论,于是贴上别人的技术旧文一篇,也许给伙伴们有些启迪: https://spin.atomicobject.com/2017/03/22/parsing-excel-files-ruby/

需要 登录 后方可回复, 如果你还没有账号请 注册新账号