Class: Legion::Data::Extract::Handlers::Xlsx

Inherits:
Base
  • Object
show all
Defined in:
lib/legion/data/extract/handlers/xlsx.rb

Class Method Summary collapse

Methods inherited from Base

available?, for_type, inherited, register, supported_types

Methods included from Logging::Helper

#handle_exception

Class Method Details

.extensionsObject



9
# File 'lib/legion/data/extract/handlers/xlsx.rb', line 9

def self.extensions = %w[.xlsx .xls]

.extract(source) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/legion/data/extract/handlers/xlsx.rb', line 12

def self.extract(source)
  require 'rubyXL'
  require 'rubyXL/convenience_methods'

  workbook = ::RubyXL::Parser.parse(source)
  sheets = []
  workbook.worksheets.each do |sheet|
    rows = sheet.each.filter_map do |row|
      next unless row

      row.cells.map { |c| c&.value.to_s }.join(', ')
    end
    sheets << "Sheet: #{sheet.sheet_name}\n#{rows.join("\n")}" unless rows.empty?
  end
  text = sheets.join("\n\n")
  { text: text, metadata: { sheets: workbook.worksheets.size } }
rescue LoadError => e
  handle_exception(e, level: :warn, handled: true, operation: :extract_xlsx, gem: gem_name)
  { text: nil, error: :gem_not_installed, gem: gem_name }
rescue StandardError => e
  handle_exception(e, level: :warn, handled: true, operation: :extract_xlsx)
  { text: nil, error: e.message }
end

.gem_nameObject



10
# File 'lib/legion/data/extract/handlers/xlsx.rb', line 10

def self.gem_name = 'rubyXL'

.typeObject



8
# File 'lib/legion/data/extract/handlers/xlsx.rb', line 8

def self.type = :xlsx