¿Hay algún complemento en Ruby que convierta un archivo CSV en Excel? Hice poco Google, pero todo lo que encontré fue convertir el archivo de Excel en CSV. Conozco algunas gemas que puedo modificar un poco y usar para convertir Excel a CSV, pero necesito saber si alguien lo ha hecho antes.Cómo convertir CSV a Excel?
Respuesta
De acuerdo con this post, la gema spreadsheet es una posibilidad. Parece que esta es una joya muy popular. Echale un vistazo. Ejemplo:
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)
Según this post, write_xlsx es una posibilidad.
He usado el Apache POI library con JRuby para exportar archivos xls. Aquí hay un ejemplo rápido.
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
Algunos métodos útiles para el formato de las hojas de cálculo de puntos de interés son
sheet.createFreezePane(0,1,0,1)
wb.setRepeatingRowsAndColumns(0, -1, -1, 0, 1)
sheet.setColumnWidth(i, 100 *256)
sheet.autoSizeColumn(i)
, pero cuidado, si se está ejecutando en el modo sin cabeza, que tiene que llame aljava.lang.System.setProperty("java.awt.headless", "true")
Puede también utilizar Win32ole en Windows, si tiene Excel instalado
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
Algunos métodos útiles para formatear con Excel está
xl.Rows(1).Font.Bold = true
ws.Cells.EntireColumn.AutoFit
embargo Otra opción es escribir directamente en el XML Spreadsheet de Microsoft formato, como Ryan Bates en Railscasts.com hace 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>
Parece que si está usando win32ole de todos modos podría simplemente 'abrir' el archivo csv en Excel y guardarlo como xls. Aunque no estoy seguro de lo que sería el código. – pguardiario
Buen punto. Esperaba que el ejemplo fuera similar al anterior, pero abrir el CSV directamente en Excel es una idea más inteligente. –
Hay una gema más que encontré writeexcel hizo el trabajo muy fácilmente .. Gracias de nuevo. –
Si no encuentra ninguna joya para convertir CSV a EXCEL, entonces puede tratar de encontrar dos gemas separado
- lectura/escritura CSV (Para leer el archivo CSV) por ejemplo, FasterCSV
- Lectura/Escritura EXCEL (para el archivo EXCEL de escritura) p. SpreadSheet
Tenga en cuenta que FasterCSV está integrado en Ruby 1.9 ahora como 'require" csv "' en la biblioteca estándar. – Phrogz
- 1. Cómo convertir Excel XLS a CSV usando PHP
- 2. Convertir formato JSON a formato CSV para MS Excel
- 3. Convertir MDB a CSV
- 4. Convertir RDA a csv
- 5. Convertir CSV en XLS
- 6. Convertir archivo CSV a XML
- 7. Convertir DataTable a CSV stream
- 8. ¿Cómo convertir múltiples archivos xls a csv usando powershell?
- 9. Cómo convertir el formato MetaStock a CSV?
- 10. cómo convertir CSV a tabla en Oracle
- 11. Silverlight DataGrid: exportar a excel o csv
- 12. Javascript o exportación Flash a CSV/Excel
- 13. Convertir archivo txt a csv en powershell
- 14. cómo datos en negrita csv en excel?
- 15. Convertir archivo XML a CSV en java
- 16. ¿Convertir de base de datos/Excel/CSV a accesorios de datos YAML?
- 17. Convertir archivo CHM a CSV o SQL
- 18. convertir datos csv a DataTable en VB.net
- 19. Convertir CSV a ARFF usando weka
- 20. Biblioteca PHP para convertir JSON a CSV?
- 21. Python - convertir el archivo csv a JSON
- 22. Convertir matriz en csv
- 23. ¿Cómo convertir un archivo separado por tabulaciones al formato CSV?
- 24. ¿Cómo convertir el archivo NSMutableArray a CSV en iPhone?
- 25. Convertir documentos de Excel a marcado wiki
- 26. Importación de archivos csv de varias líneas a Excel internacionalmente
- 27. Convertir objeto Java en CSV
- 28. cakephp componente de exportación excel/csv
- 29. Cómo exportar una tabla al formato csv o excel
- 30. ¿Hay alguna manera simple de convertir el archivo .xls al archivo .csv? (Excel)
Normalmente, solo dejamos que Excel importe el archivo CSV. Por lo general, solo funciona. –
Otra alternativa casi nativa: la importación XML también puede producir documentos Excel "bonitos". Alimentar la salida de Rails '#to_xml en un XSLT para hacer esto. –
Posible pregunta duplicada: http://stackoverflow.com/questions/6646430/whats-the-easiest-way-to-export-a-csv-to-excel-with-ruby –