【问题标题】:How to generate Excel file with passing params from AJAX search?如何通过 AJAX 搜索传递参数生成 Excel 文件?
【发布时间】:2012-10-16 14:20:46
【问题描述】:

我正在我的 Rails 应用程序中执行 AJAX 搜索。这是控制器的代码:

def show
@website = Website.find(params[:id])
if (current_user.id != @website.user_id)
  redirect_to root_path
  flash[:notice] = 'You are not owner!'
end
if params[:report] && params[:report][:start_date] && params[:report][:end_date]
  @performance_reports = @website.performance_reports.where("created_at between ? and ?", params[:report][:start_date].to_date, params[:report][:end_date].to_date)    
else
  @performance_reports = @website.performance_reports
end

但是当我尝试生成 Excel 文档时,它总是在没有参数的情况下转到分支,因为 URL 中没有参数。

一位男士推荐我使用这个post。我试图实现它,但不能。

我对这篇文章的理解不够,我只是无法获取数据传递的位置(电子表格 gem)

代码如下:

 def export

  @website = Website.last

  @data = @website.performance_reports

  report = Spreadsheet::Workbook.new

  spreadsheet = StringIO.new

  contruct_body(spreadsheet, @data)

  report.write spreadsheet 

  send_data spreadsheet.string, :filename => "yourfile.xls", :type =>  "application/vnd.ms-excel"


 end

它给了我错误:

 undefined method `contruct_body'

视图中的代码:

    <%= form_tag( url_for, :method => :get, :id => "report") do%>
      ...show action posted above...
     <% end %>

    <%= link_to export_path do%>
     <b>Export</b>
    <% end %>
   ...working code without AJAX...
       <%= link_to url_for(request.parameters.merge({:format => :xls}))  do%>
    <b>Export</b>
    <% end %>

请告诉我我的错误在哪里或提出建议

【问题讨论】:

    标签: ruby-on-rails ajax spreadsheet export-to-excel


    【解决方案1】:

    对于第一个问题,您需要显示视图代码和 ajax 所采用的路径。向我们提供更多关于如何调用 excel 的信息。

    对于第二个问题,您需要定义该方法。指定如何使用数据填充电子表格。这是指南。 https://github.com/zdavatz/spreadsheet/blob/master/GUIDE.txt

    == 写作很容易 和以前一样,确保您需要电子表格和 client_encoding 放。然后制作一个新的工作簿:

      book = Spreadsheet::Workbook.new
    

    添加工作表,一切顺利:

      sheet1 = book.create_worksheet
    

    这将创建一个名为“Worksheet1”的工作表。如果你更喜欢另一个 姓名,您可以执行以下任一操作:

      sheet2 = book.create_worksheet :name => 'My Second Worksheet'
      sheet1.name = 'My First Worksheet'
    

    现在,使用Worksheet#[]= 向工作表添加数据, Worksheet#update_row,或使用任何 Array-Methods 直接在 Row 上工作 就地修改数组:

      sheet1.row(0).concat %w{Name Country Acknowlegement}
      sheet1[1,0] = 'Japan'
      row = sheet1.row(1)
      row.push 'Creator of Ruby'
      row.unshift 'Yukihiro Matsumoto'
      sheet1.row(2).replace [ 'Daniel J. Berger', 'U.S.A.',
                              'Author of original code for Spreadsheet::Excel' ]
      sheet1.row(3).push 'Charles Lowe', 'Author of the ruby-ole Library'
      sheet1.row(3).insert 1, 'Unknown'
      sheet1.update_row 4, 'Hannes Wyss', 'Switzerland', 'Author'
    

    为风味添加一些格式:

      sheet1.row(0).height = 18
    
      format = Spreadsheet::Format.new :color => :blue,
                                       :weight => :bold,
                                       :size => 18
      sheet1.row(0).default_format = format
    
      bold = Spreadsheet::Format.new :weight => :bold
      4.times do |x| sheet1.row(x + 1).set_format(0, bold) end
    

    最后,编写 Excel 文件:

      book.write '/path/to/output/excel-file.xls'
    

    【讨论】:

    • 检查日志它可能正在寻找您需要的模板。对于您的第一个问题,如果您重定向,则需要使用参数进行重定向。如果没有,那么您需要调试并找到丢失它们的位置。
    • 正在生成excel文件。我可以在我的文件夹中看到它。您能告诉我如何在 show action 的导出操作中使用变量吗?
    • 您如何从导出重定向到显示?您必须保留参数,但这取决于场景。或者您可以在实例变量中跟踪它们。
    • 这对我来说将是另一个问题 - 因为它不是默认选项卡。现在我将使用redirect_to :back
    • 可以解决不重定向的问题,因为这会发送一个新请求。试试render :showen.wikibooks.org/wiki/Ruby_on_Rails/ActionView/…
    猜你喜欢
    • 2013-10-01
    • 2023-03-15
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 2021-05-20
    相关资源
    最近更新 更多