gpt4 book ai didi

ruby - 如何将 CSV 转换为 Excel?

转载 作者:数据小太阳 更新时间:2023-10-29 06:49:42 24 4
gpt4 key购买 nike

Ruby 中是否有任何插件可以将 CSV 文件转换为 Excel。我几乎没用谷歌搜索,但我发现的只是将 Excel 文件转换为 CSV。我知道一些我可以稍微调整并用于将 Excel 转换为 CSV 的 gem ,但我需要知道以前是否有人这样做过。

最佳答案

根据 this post , spreadsheet gem 是一种可能性。看起来这是一个非常受欢迎的 gem 。看看这个。例子:

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是有可能的。

我用过 Apache POI library使用 JRuby 导出 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),但请注意,如果您在 headless 模式下运行,则必须调用 java.lang.System.setProperty("java.awt.headless ", "真")

如果您安装了 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

另一种选择是直接写入 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 .

关于ruby - 如何将 CSV 转换为 Excel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10118158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com