CSVファイルをExcelに変換するRubyのプラグインはありますか。私はほとんどグーグルをしませんでしたが、私が見つけたのはExcelファイルをCSVに変換することだけでした. 少し微調整してExcelをCSVに変換するために使用できる宝石はほとんど知りませんが、以前にそれを行ったことがあるかどうかを知る必要があります。
質問する
13630 次
4 に答える
11
この投稿によると、スプレッドシートの宝石が可能性です。とても人気のある逸品のようです。見てみな。例:
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)
この投稿によると、write_xlsxが可能です。
JRuby でApache POI ライブラリを使用してxls ファイルをエクスポートしました。簡単な例を次に示します。
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
POI スプレッドシートをフォーマットするための便利な方法を次に示します。
sheet.createFreezePane(0,1,0,1)
wb.setRepeatingRowsAndColumns(0, -1, -1, 0, 1)
sheet.setColumnWidth(i, 100 *256)
sheet.autoSizeColumn(i)
、ただし、ヘッドレスモードで実行している場合は、呼び出す必要があることに注意してくださいjava.lang.System.setProperty("java.awt.headless", "true")
Excel がインストールされている場合は、Windows で Win32ole を使用することもできます。
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
Excel で書式設定するためのいくつかの便利な方法は次のとおりです。
xl.Rows(1).Font.Bold = true
ws.Cells.EntireColumn.AutoFit
Railscasts.com の Ryan Bates がExporting CSV and Excelエピソードの最後で行っているように、Microsoft のXML スプレッドシート形式に直接書き込むこともできます。
<?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>
この宝石も有望そうです。
于 2012-04-12T06:47:08.507 に答える
2
CSV を EXCEL に変換するための gem が見つからない場合は、2 つの gem を別々に見つけてみてください。
- Read/Write CSV (CSV ファイルの読み込み用) 例: FasterCSV
- Read/Write EXCEL (EXCEL ファイルの書き込み用) eg SpreadSheet
于 2012-04-12T06:55:47.720 に答える