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 がたどっているパスを表示する必要があります。エクセルの呼び出し方法について詳しく教えてください。

2 番目の問題については、そのメソッドを定義する必要があります。スプレッドシートにデータを入力する方法を指定します。これがガイドです。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、または配列をその場で変更する配列メソッドのいずれかを使用して 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 に答える