ruby - 使用 Ruby 解析 XLS 和 XLSX (MS Excel) 文件?

标签 ruby excel

有没有能够解析 XLS 和 XLSX 文件的 gem?我找到了 Spreadsheet 和 ParseExcel,但它们都不理解 XLSX 格式。

最佳答案

我最近需要用 Ruby 解析一些 Excel 文件。丰富的库和选项结果令人困惑,所以我写了一个 blog post关于它。

下表列出了不同的 Ruby 库及其支持的内容:

enter image description here

如果您关心性能,下面是 xlsx 库的比较: enter image description here

我有示例代码可以使用每个支持的库读取 xlsx 文件 here

下面是一些使用不同库读取 xlsx 文件的示例:

rubyXL

require 'rubyXL'

workbook = RubyXL::Parser.parse './sample_excel_files/xlsx_500_rows.xlsx'
worksheets = workbook.worksheets
puts "Found #{worksheets.count} worksheets"

worksheets.each do |worksheet|
  puts "Reading: #{worksheet.sheet_name}"
  num_rows = 0
  worksheet.each do |row|
    row_cells = row.cells.map{ |cell| cell.value }
    num_rows += 1
  end
  puts "Read #{num_rows} rows"
end

require 'roo'

workbook = Roo::Spreadsheet.open './sample_excel_files/xlsx_500_rows.xlsx'
worksheets = workbook.sheets
puts "Found #{worksheets.count} worksheets"

worksheets.each do |worksheet|
  puts "Reading: #{worksheet}"
  num_rows = 0
  workbook.sheet(worksheet).each_row_streaming do |row|
    row_cells = row.map { |cell| cell.value }
    num_rows += 1
  end
  puts "Read #{num_rows} rows" 
end

小溪

require 'creek'

workbook = Creek::Book.new './sample_excel_files/xlsx_500_rows.xlsx'
worksheets = workbook.sheets
puts "Found #{worksheets.count} worksheets"

worksheets.each do |worksheet|
  puts "Reading: #{worksheet.name}"
  num_rows = 0
  worksheet.rows.each do |row|
    row_cells = row.values
    num_rows += 1
  end
  puts "Read #{num_rows} rows"
end

simple_xlsx_reader

require 'simple_xlsx_reader'

workbook = SimpleXlsxReader.open './sample_excel_files/xlsx_500000_rows.xlsx'
worksheets = workbook.sheets
puts "Found #{worksheets.count} worksheets"

worksheets.each do |worksheet|
  puts "Reading: #{worksheet.name}"
  num_rows = 0
  worksheet.rows.each do |row|
    row_cells = row
    num_rows += 1
  end
  puts "Read #{num_rows} rows"
end

下面是一个使用 spreadsheet 库读取遗留 xls 文件的示例:

电子表格

require 'spreadsheet'

# Note: spreadsheet only supports .xls files (not .xlsx)
workbook = Spreadsheet.open './sample_excel_files/xls_500_rows.xls'
worksheets = workbook.worksheets
puts "Found #{worksheets.count} worksheets"

worksheets.each do |worksheet|
  puts "Reading: #{worksheet.name}"
  num_rows = 0
  worksheet.rows.each do |row|
    row_cells = row.to_a.map{ |v| v.methods.include?(:value) ? v.value : v }
    num_rows += 1
  end
  puts "Read #{num_rows} rows"
end

关于ruby - 使用 Ruby 解析 XLS 和 XLSX (MS Excel) 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3321011/

相关文章:

ruby - 无法安装 ruby​​ 1.9.3 获取请求的 URL 不存在

ruby - Ruby的标准库中有优先级队列数据结构的实现吗?

excel - 我可以在不改变样式的情况下清除单元格内容吗?

oracle - 用于带有宏和 VB 的 MS-Excel 电子表格到 Oracle 的转换工具?

vba - 设置范围语句错误

ruby-on-rails - Ruby `require` 在 rails lib 中找不到我的文件

ruby - 在 Ruby 2.3.1 中列出子类

ruby-on-rails - 如何通过 RVM 安装 Rails 4(最终版)和最新版本的 Ruby?

ruby-on-rails - AXLSX 条形图中的倒轴

javascript - 网页中的 Excel 数据透视表