2012-04-12 15 views
8

CSVファイルをExcelに変換するプラグインはRubyにありますか?私はほとんどGoogleをしなかったが、私が見つけたのは、ExcelファイルをCSV形式に変換することだけだった。私はちょっと微調整してExcelをCSVに変換するのに使うことができる宝石を知っていますが、誰かがそれを以前に行ったかどうかを知る必要があります。CSVをExcelに変換するには?

+3

通常、ExcelではCSVをインポートできます。通常は動作します。 –

+0

もう1つのほぼネイティブな選択肢です。XMLのインポートによって「かなり」Excelドキュメントが生成される可能性があります。これを行うには、Railsの#to_xmlの出力をXSLTに送ります。 –

+0

可能な重複した質問:http://stackoverflow.com/questions/6646430/whats-the-easiest-way-to-export-a-csv-to-excel-with-ruby –

答えて

10

this postによれば、spreadsheetの可能性があります。これは非常に人気のある宝石のようです。見てみな。例:

book = Spreadsheet::Workbook.new 
sheet1 = book.create_worksheet 

header_format = Spreadsheet::Format.new(
    :weight => :bold, 
    :horizontal_align => :center, 
    :bottom => true, 
    :locked => true 
) 

sheet1.row(0).default_format = header_format 

FasterCSV.open(input_path, 'r') do |csv| 
    csv.each_with_index do |row, i| 
    sheet1.row(i).replace(row) 
    end 
end 

book.write(output_path) 

this postによれば、write_xlsxが可能です。

xlsファイルをエクスポートするのにJRubyでApache POI libraryを使用しました。ここに簡単な例があります。あなたはヘッドレスモードで実行している場合POIのスプレッドシートをフォーマットするための

require 'java' 
require 'poi.jar' 
# require 'poi-ooxml.jar' 
require 'rubygems' 
require 'fastercsv' 

java_import org.apache.poi.hssf.usermodel.HSSFWorkbook; 

wb = HSSFWorkbook.new # OR XSSFWorkbook, for xlsx 
sheet = wb.create_sheet('Sheet 1') 

FasterCSV.open(ARGV.first) do |csv| 
    csv.each_with_index do |csv_row, line_no| 
    row = sheet.createRow(line_no) 
    csv_row.each_with_index do |csv_value, col_no| 
     cell = row.createCell(col_no) 
     cell.setCellValue(csv_value) unless csv_value.nil? # can't pass nil. 
    end 
    end 
end 


f = java.io.FileOutputStream.new("workbook.xls") 
wb.write(f) 
f.close 

いくつかの有用な方法は、

  • sheet.autoSizeColumn(i)sheet.createFreezePane(0,1,0,1)
  • wb.setRepeatingRowsAndColumns(0, -1, -1, 0, 1)
  • sheet.setColumnWidth(i, 100 *256)
    • ですが、注意してください、あなたがする必要があります電話java.lang.System.setProperty("java.awt.headless", "true")
    あなたはExcelがエクセルでフォーマットするためのいくつかの有用な方法はまだ

    • xl.Rows(1).Font.Bold = true
    • ws.Cells.EntireColumn.AutoFit

    ある

    require 'win32ole' 
    require 'rubygems' 
    require 'fastercsv' 
    
    xl = WIN32OLE.new('Excel.Application') 
    xl.Visible = 0 
    wb = xl.Workbooks.Add 
    ws = wb.Worksheets(1) 
    
    FasterCSV.open(ARGV.first) do |csv| 
        csv.each_with_index do |csv_row, line_no| 
        csv_row.each_with_index do |value, col| 
         ws.Cells(line_no + 1, col + 1).Value = value 
        end 
        end 
    end 
    
    wb.SaveAs("workbook.xls", 56) # 56 = xlExcel8 aka Excel 97-2003. i.e. xls 
    wb.SaveAs("workbook.xlsx", 51) # 51 = xlOpenXMLWorkbook 
    wb.SaveAs("workbook.xlsb", 50) # 50 = xlExcel12 
    
    wb.Close(2) #xlDoNotSaveChanges 
    xl.Quit 
    

    をインストールしている場合にも、Windows上でWin32oleを使用することができます

    別のオプションは、MicrosoftのXML Spreadsheetに直接書き込むことですフォーマットは、Railscasts.comのRyan Batesがat the end of his Exporting CSV and Excel episodeのようにします。

    <?xml version="1.0"?> 
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
        xmlns:o="urn:schemas-microsoft-com:office:office" 
        xmlns:x="urn:schemas-microsoft-com:office:excel" 
        xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" 
        xmlns:html="http://www.w3.org/TR/REC-html40"> 
        <Worksheet ss:Name="Sheet1"> 
        <Table> 
         <Row> 
         <Cell><Data ss:Type="String">ID</Data></Cell> 
         <Cell><Data ss:Type="String">Name</Data></Cell> 
         <Cell><Data ss:Type="String">Release Date</Data></Cell> 
         <Cell><Data ss:Type="String">Price</Data></Cell> 
         </Row> 
        <% @products.each do |product| %> 
         <Row> 
         <Cell><Data ss:Type="Number"><%= product.id %></Data></Cell> 
         <Cell><Data ss:Type="String"><%= product.name %></Data></Cell> 
         <Cell><Data ss:Type="String"><%= product.released_on %></Data></Cell> 
         <Cell><Data ss:Type="Number"><%= product.price %></Data></Cell> 
         </Row> 
        <% end %> 
        </Table> 
        </Worksheet> 
    </Workbook> 
    

    This gem looks promising, too。別途

    +2

    あなたがwin32oleを使っているのであれば、ExcelのCSVファイルを開いてxlsとして保存するだけのようです。私はコードが何であるか分からない。 – pguardiario

    +0

    良い点。私は、その例を上の例に似せるようにしたいと考えていましたが、CSVをExcelに直接開くことはよりスマートな考えです。 –

    +0

    もう1つの宝石があります。私はwriteexcelが非常に簡単に仕事をしてくれました。もう一度おねがいします。 –

    2

    あなたはEXCELへの改宗者CSVのための任意の宝石を見つけない場合、次の2つの宝石を見つけることを試みること

      (CSVファイルを読み込むための)
    1. 読み取り/書き込みCSV例えばFasterCSV
    2. 読み出し/書き込みEXCEL(書き込みEXCELファイル用)。 SpreadSheet
    +1

    FasterCSVは標準ライブラリで 'require" csv "'としてRuby 1.9に組み込まれています。 – Phrogz

    関連する問題