【问题标题】:Downloading workbook without saving it to disk rubyxl in Rails在 Rails 中下载工作簿而不将其保存到磁盘 ruby​​xl
【发布时间】:2016-01-02 07:56:02
【问题描述】:
Rails 4.2
RubyXL

我正在使用 RubyXL 创建工作簿。我可以用它写磁盘:

workbook.write("path/to/desired/Excel/file.xlsx")

然后用这样的方式下载它:

send_file(workbook.write("path/to/desired/Excel/file.xlsx"), options = {:filename => 'myworkbook.xlsx', :disposition => 'attachment'})

关于如何在无需先将其保存到服务器的情况下下载它有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails rubyxl


    【解决方案1】:

    您可以将工作簿直接转换为字符串:

    def get_worksheet_as_string
      workbook = RubyXL::Workbook.new
      # Fill workbook here or leave as is to download empty
      send_data workbook.stream.string, filename: "myworkbook.xlsx",
                                        disposition: 'attachment'
    end
    

    【讨论】:

    • 它没有用。错误消息是我在流中得到一个零。当我将它保存到磁盘时,它工作正常。
    • @EastsideDeveloper 它在我的代码中工作,我不知道什么差异可能导致这种行为。您可以尝试用read 替换string 吗?它应该返回相同的结果,但我猜出了什么问题......
    • 用我不久前尝试的方法更新了我的答案。在这种状态下,它按预期工作。你可以试试这个然后检查,工作簿的什么修改意味着它停止工作。
    • 不错!这应该在文档中。我不知道您需要转换为字符串。
    【解决方案2】:

    如果您在 Sinatra 工作:

    get '/download-xlsx/?' do
        content_type 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        attachment(filename = "filename.xlsx", disposition = :attachment)
    
        workbook = RubyXL::Workbook.new
    
        # Fill the workbook with data
    
        workbook.stream
    end
    

    认为这可能对在 Sinatra 工作的人有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      相关资源
      最近更新 更多