1

我正在我的 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 中没有参数。

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

我不太了解这篇文章,我只是无法获取数据传递的位置(电子表格宝石)

这是代码:

 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 %>

请告诉我我的错误在哪里或建议没有

4

1 回答 1

2

对于第一个问题,您需要显示视图代码和 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'

现在,使用 、 或直接在 Row 上使用任何修改 Array 的 Array-Methods 将数据添加到工作Worksheet#[]=Worksheet#update_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'
于 2012-10-16T14:31:25.913 回答