将 CSV 文件转换为 XLSX 并提供两种格式作为用户导出的最佳方法

Sim*_*zen 7 csv excel ruby-on-rails xlsx export-to-excel

我实现了一个 CSV 导出器,其工作方式如下:

  1. 用户触发 CSV 导出
  2. 应用程序创建一个新的后台作业
  3. 作业生成 CSV 使用 CSV.generate
  4. 作业使用回形针将文件保存在 Amazon S3 上(使用 分配文件StringIO
  5. 用户可以在工作完成后下载 CSV

这个过程效果很好!

现在我还需要提供一个 xlsx 导出

我只是尝试将文件的内容类型更改为 xlsx 格式,但是我收到了回形针的内容欺骗错误。我也在努力设置它在 Windows 和 Mac 机器上工作的内容类型。我研究了一下,发现了以下插件:

我需要的:

  • 将 CSV 转换为 XLSX 或 Simple XLSX 生成器的方法,例如 CSV.generate
  • 生成具有正确内容类型的文件(LibreOffice、Microsoft Office、Numbers 应该能够无错误地打开文件)

我目前的 CSV 一代

# data var filled up with with customers
CSV.generate(options) do |csv|
  csv << [
    'header 1',
    'header 2'
  ]
  data.each do |obj|
    csv << [
      obj.attr1,
      obj.attr2,
    ]
  end
end

file = StringIO.new(data) #mimic a real upload file
file.class.class_eval { attr_accessor :original_filename, :content_type } #add attr's that paperclip needs
file.original_filename = "customer-export.#{customer_export.params['format']}" #assign filename in way that paperclip likes
file.content_type = content_type # text/plain for CSV and ? for XLSX

# the file can be assigned to an paperclip attachment and this works for now perfect
Run Code Online (Sandbox Code Playgroud)

顺便说一句:Ruby 2.2,Rails 4.1