2009-04-01 12 views
3

あなたは何を考えているのですか?データをCSV形式でダウンロードしてExcelにインポートするだけです。Ruby on RailsアプリケーションからExcelスプレッドシートにデータを取得する最良の方法は何ですか?

残念ながら、私たちが必要とするのは、ユーザーがRailsアプリケーションからいくつかのデータを簡単に選択できるようにすることです(つまり、できるだけユーザーの介入が少ない、理想的には単一のボタンを押して)データに適用されるさまざまな数式やマクロなどが含まれています。

私の理想的な解決策は、Railsの終わりで大部分が重くなることです。私のスキルがあるところではそうですが、Excelウェブ統合の役に立つものがあると思います。

とにかく、これには良いアプローチがいくつかありますか?

答えて

2

は輸出部分は合理的に、少なくとも覆われている - ここで候補宝石のカップルです:

私は一度あなたがあなたのデータを持っていること(希望を!)容疑者XLSフォームでは、残りはクライアント側で配管する必要があります。

ExcelのWebクエリ機能を見ても価値はありますか?ユーザーが選択基準を定義して変更が頻繁でない場合、カスタムページ(たぶんテーブルを提供する)によってデータがExcelセッションに直接ドロップされる可能性があります。ちょうど思考...

+0

ありがとう: https://github.com/randym/axlsx

ここでは、MicrosoftのSkyDriveのテンプレートを構築する例です。残念なことに、定義によって、データは各要求ごとに異なります。だから何らかの形でExcelのWebクエリビットは、データを選択するWeb UIビットと対話する必要があります。 – DanSingerman

4

axlsxにrailscasts.comで無料の短いスクリーンキャストを発表したが、おそらく深い仕事をExcelの最も完全な実装です。 - これらは私が一緒に考えていたラインだった enter image description here

require 'axlsx' 

Axlsx::Package.new do |p| 
    p.workbook do |wb| 
    styles = wb.styles 
    header = styles.add_style :bg_color => "DD", :sz => 16, :b => true, :alignment => {:horizontal => :center} 
    tbl_header = styles.add_style :b => true, :alignment => { :horizontal => :center } 
    ind_header = styles.add_style :bg_color => "FFDFDEDF", :b => true, :alignment => {:indent => 1} 
    col_header = styles.add_style :bg_color => "FFDFDEDF", :b => true, :alignment => { :horizontal => :center } 
    label  = styles.add_style :alignment => { :indent => 1 } 
    money  = styles.add_style :num_fmt => 5 
    t_label  = styles.add_style :b => true, :bg_color => "FFDFDEDF" 
    t_money = styles.add_style :b => true, :num_fmt => 5, :bg_color => "FFDFDEDF" 

    wb.add_worksheet do |sheet| 
     sheet.add_row 
     sheet.add_row [nil, "College Budget"], :style => [nil, header] 
     sheet.add_row 
     sheet.add_row [nil, "What's coming in this month.", nil, nil, "How am I doing"], :style => tbl_header 
     sheet.add_row [nil, "Item", "Amount", nil, "Item", "Amount"], :style => [nil, ind_header, col_header, nil, ind_header, col_header] 
     sheet.add_row [nil, "Estimated monthly net income", 500, nil, "Monthly income", "=C9"], :style => [nil, label, money, nil, label, money] 
     sheet.add_row [nil, "Financial aid", 100, nil, "Monthly expenses", "=C27"], :style => [nil, label, money, nil, label, money] 
     sheet.add_row [nil, "Allowance from mom & dad", 20000, nil, "Semester expenses", "=F19"], :style => [nil, label, money, nil, label, money] 
     sheet.add_row [nil, "Total", "=SUM(C6:C8)", nil, "Difference", "=F6 - SUM(F7:F8)"], :style => [nil, t_label, t_money, nil, t_label, t_money] 
     sheet.add_row 
     sheet.add_row [nil, "What's going out this month.", nil, nil, "Semester Costs"], :style => tbl_header 
     sheet.add_row [nil, "Item", "Amount", nil, "Item", "Amount"], :style => [nil, ind_header, col_header, nil, ind_header, col_header] 
     sheet.add_row [nil, "Rent", 650, nil, "Tuition", 200], :style => [nil, label, money, nil, label, money] 
     sheet.add_row [nil, "Utilities", 120, nil, "Lab fees", 50], :style => [nil, label, money, nil, label, money] 
     sheet.add_row [nil, "Cell phone", 100, nil, "Other fees", 10], :style => [nil, label, money, nil, label, money] 
     sheet.add_row [nil, "Groceries", 75, nil, "Books", 150], :style => [nil, label, money, nil, label, money] 
     sheet.add_row [nil, "Auto expenses", 0, nil, "Deposits", 0], :style => [nil, label, money, nil, label, money] 
     sheet.add_row [nil, "Student loans", 0, nil, "Transportation", 30], :style => [nil, label, money, nil, label, money] 
     sheet.add_row [nil, "Other loans", 350, nil, "Total", "=SUM(F13:F18)"], :style => [nil, label, money, nil, t_label, t_money] 
     sheet.add_row [nil, "Credit cards", 450], :style => [nil, label, money] 
     sheet.add_row [nil, "Insurance", 0], :style => [nil, label, money] 
     sheet.add_row [nil, "Laundry", 10], :style => [nil, label, money] 
     sheet.add_row [nil, "Haircuts", 0], :style => [nil, label, money] 
     sheet.add_row [nil, "Medical expenses", 0], :style => [nil, label, money] 
     sheet.add_row [nil, "Entertainment", 500], :style => [nil, label, money] 
     sheet.add_row [nil, "Miscellaneous", 0], :style => [nil, label, money] 
     sheet.add_row [nil, "Total", "=SUM(C13:C26)"], :style => [nil, t_label, t_money] 
     sheet.add_chart(Axlsx::Pie3DChart) do |chart| 
     chart.title = sheet["B11"] 
     chart.add_series :data => sheet["C13:C26"], :labels => sheet["B13:B26"] 
     chart.start_at 7, 2 
     chart.end_at 12, 15 
     end 
     sheet.add_chart(Axlsx::Bar3DChart, :barDir => :col) do |chart| 
     chart.title = sheet["E11"] 
     chart.add_series :labels => sheet["E13:E18"], :data => sheet["F13:F18"] 
     chart.start_at 7, 16 
     chart.end_at 12, 31 
     end 
     sheet.merged_cells.concat ["B4:C4","E4:F4","B11:C11","E11:F11","B2:F2"] 
     sheet.column_widths 2, nil, nil, 2, nil, nil, 2 
    end 
end 
p.use_shared_strings = true 
p.serialize 'axlsx.xlsx' 
end 
関連する問題