Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 0 additions & 18 deletions lib/saxlsx/column_name_generator.rb

This file was deleted.

37 changes: 30 additions & 7 deletions lib/saxlsx/rows_collection_parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ def start_element(name)
case name
when :row
@current_row = []
@next_column = 'A'
when :c
@current_type = nil
@current_number_format = nil
Expand All @@ -74,7 +73,11 @@ def attr(name, value)
when :t
@current_type = value
when :r
@current_column = value.gsub(/\d/, '')
# fill missing columns with nil values
nb_columns = extract_current_column(value) - 1
while @current_row.size != nb_columns
@current_row << nil
end
when :s
@current_number_format = detect_format_type(value.to_i)
end
Expand All @@ -83,12 +86,7 @@ def attr(name, value)

def text(value)
if @current_row && (@current_element == :v || @current_element == :t)
while @next_column != @current_column
@current_row << nil
@next_column = ColumnNameGenerator.next_to(@next_column)
end
@current_row << value_of(value)
@next_column = ColumnNameGenerator.next_to(@next_column)
end
end

Expand Down Expand Up @@ -155,5 +153,30 @@ def detect_custom_format_type(code)
:unsupported
end
end

def char_index(byte)
if byte >= 65 && byte <= 90
byte - 64
elsif byte >= 97 && byte <= 122
byte - 96
end
end

def extract_current_column(value)
letter_num = 0

value.each_byte do |b|
if index = char_index(b)
letter_num *= 26
letter_num += index
else
break
end
end

raise ArgumentError if letter_num == 0

letter_num
end
end
end
25 changes: 0 additions & 25 deletions spec/column_name_generator_spec.rb

This file was deleted.