Class: ImpExp::Utils::XlsxReader
- Inherits:
-
Object
- Object
- ImpExp::Utils::XlsxReader
- Defined in:
- app/services/imp_exp/utils/xlsx_reader.rb
Instance Attribute Summary collapse
-
#parse_headers ⇒ Object
readonly
Returns the value of attribute parse_headers.
-
#skip_rows ⇒ Object
readonly
Returns the value of attribute skip_rows.
-
#workbook ⇒ Object
readonly
Returns the value of attribute workbook.
Instance Method Summary collapse
-
#initialize(xlsx_stream, skip_rows: 1, parse_headers: true) ⇒ XlsxReader
constructor
A new instance of XlsxReader.
- #sheet_by_name(sheet_name) ⇒ Object
- #sheet_data(sheet_name) ⇒ Object
- #sheet_header_names(sheet_name) ⇒ Object
- #sheet_names ⇒ Object
- #sheet_row_values(sheet_name, row_nb) ⇒ Object
Constructor Details
#initialize(xlsx_stream, skip_rows: 1, parse_headers: true) ⇒ XlsxReader
Returns a new instance of XlsxReader.
12 13 14 15 16 |
# File 'app/services/imp_exp/utils/xlsx_reader.rb', line 12 def initialize(xlsx_stream, skip_rows: 1, parse_headers: true) @workbook = Xsv.open(xlsx_stream, parse_headers: parse_headers) @parse_headers = parse_headers @skip_rows = skip_rows end |
Instance Attribute Details
#parse_headers ⇒ Object (readonly)
Returns the value of attribute parse_headers.
8 9 10 |
# File 'app/services/imp_exp/utils/xlsx_reader.rb', line 8 def parse_headers @parse_headers end |
#skip_rows ⇒ Object (readonly)
Returns the value of attribute skip_rows.
8 9 10 |
# File 'app/services/imp_exp/utils/xlsx_reader.rb', line 8 def skip_rows @skip_rows end |
#workbook ⇒ Object (readonly)
Returns the value of attribute workbook.
8 9 10 |
# File 'app/services/imp_exp/utils/xlsx_reader.rb', line 8 def workbook @workbook end |
Instance Method Details
#sheet_by_name(sheet_name) ⇒ Object
22 23 24 |
# File 'app/services/imp_exp/utils/xlsx_reader.rb', line 22 def sheet_by_name(sheet_name) workbook.sheets_by_name(sheet_name)[0] end |
#sheet_data(sheet_name) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'app/services/imp_exp/utils/xlsx_reader.rb', line 45 def sheet_data(sheet_name) data = sheet_by_name(sheet_name).entries[skip_rows..] return [] if data.nil? if parse_headers data.map { |h| h.delete_if { |k, _v| k.nil? }.with_indifferent_access } .delete_if { |h| h.values.all?(&:blank?) } else data.delete_if { |a| a.all?(&:blank?) } end end |
#sheet_header_names(sheet_name) ⇒ Object
26 27 28 29 30 31 32 33 |
# File 'app/services/imp_exp/utils/xlsx_reader.rb', line 26 def sheet_header_names(sheet_name) return [] unless parse_headers sheet = sheet_by_name(sheet_name) return [] unless sheet sheet[0].keys.compact.map(&:to_sym) end |
#sheet_names ⇒ Object
18 19 20 |
# File 'app/services/imp_exp/utils/xlsx_reader.rb', line 18 def sheet_names sheets.map(&:name) end |
#sheet_row_values(sheet_name, row_nb) ⇒ Object
35 36 37 38 39 40 41 42 43 |
# File 'app/services/imp_exp/utils/xlsx_reader.rb', line 35 def sheet_row_values(sheet_name, row_nb) sheet = sheet_by_name(sheet_name) return [] unless sheet data = sheet[row_nb + skip_rows] return data unless parse_headers data.values end |