axlsxを使用しています(テンプレート用にaxlsx_railsを使用)。
コントローラーにこれがあります:
def listado_publicaciones
if params[:publicaciones]
@Publicaciones = params[:publicaciones]
else
@Publicaciones = Proyecto.where("concurso_id","=",@concurso.id).as_json({:include => [:creador => {:only =>[:id],:include =>[:ficha =>{:only =>[:nombres,:apellidos], :methods => [:fullname],:include => [:publicacions => {:only =>[:id,:omitir,:anio,:titulo,:revista_nombre,:primer_autor,:autor_correspondiente,:coautor,:estado_id],:include => [:subtipo]}]}]}]})
end
respond_to do |format|
format.html
format.json { render :json => @Publicaciones}
format.xlsx
end
end
(長い @Publicaciones を避けるために、後で JBuilder を使用します...)
さて、「listado_publicaciones」は最初にhtmlビューを表示します。ここでは、angularを使用して出版物のjsonリストを取得し、ユーザーがExcelを生成する前にいくつかのアイテムを破棄できる場所があります。次に、ユーザーは「To Excel」を呼び出すボタンをクリックしますangularjs サービス:
@project.service 'concursos_xlsx', [
'$resource'
($resource) ->
$resource '/concursos/:id/:action.xlsx', { id: '@id' },
listado_publicaciones:
method: 'POST'
params: action: 'listado_publicaciones'
]
私は POST を使用します。最初に Json で取得したパブリケーションを $scope に送り返すためです。これはパブリケーションとその他のデータの非常に大きなリストであるため、長い URL のために GET を使用しようとすると機能しません...
次に、同じコントローラー「listado_publicaciones」がパラメーター publicaciones (params[:publicaciones]) を取得し、xlsx 形式に応答します...
次に、「listado_publicaciones.xlsx.axlsx」という私のテンプレートが Excel ファイルを生成します....しかし、ダウンロード方法がわかりません... chrome 開発者ツールを確認すると、次のように表示されます。
XHR finished loading: POST "http://localhost:3000/concursos/1/listado_publicaciones.xlsx".
そして、そこをダブルクリックすると、実際に xlsx ファイルをダウンロードできます...しかし、「Excel へ」ボタンをクリックしたときにファイルをダウンロードする方法がわかりません...「send_data」を使用してみました。 「send_file」ですが、間違った方法で使用している可能性があります...助けてください、ありがとう!