Skip to content

Commit 80e264b

Browse files
committed
Move merged range expansion to a separate block
1 parent 2f0a2e3 commit 80e264b

File tree

1 file changed

+18
-16
lines changed

1 file changed

+18
-16
lines changed

lib/roo/excelx/sheet_doc.rb

+18-16
Original file line numberDiff line numberDiff line change
@@ -121,29 +121,31 @@ def extract_hyperlinks(relationships)
121121
end.compact]
122122
end
123123

124-
def extract_cells(relationships)
125-
if @options[:expand_merged_cells]
126-
# Extract merged cells
127-
merges = {}
128-
doc.xpath("/worksheet/mergeCells/mergeCell").each do |mergecell_xml|
129-
tl, br = mergecell_xml['ref'].split(/:/).map {|ref| ::Roo::Utils.ref_to_key(ref)}
130-
for row in tl[0]..br[0] do
131-
for col in tl[1]..br[1] do
132-
next if row == tl[0] and col == tl[1]
133-
merges[[row,col]] = tl
134-
end
124+
def expand_merged_ranges(cells)
125+
# Extract merged ranges from xml
126+
merges = {}
127+
doc.xpath("/worksheet/mergeCells/mergeCell").each do |mergecell_xml|
128+
tl, br = mergecell_xml['ref'].split(/:/).map {|ref| ::Roo::Utils.ref_to_key(ref)}
129+
for row in tl[0]..br[0] do
130+
for col in tl[1]..br[1] do
131+
next if row == tl[0] && col == tl[1]
132+
merges[[row,col]] = tl
135133
end
136134
end
137135
end
136+
# Duplicate value into all cells in merged range
137+
merges.each do |dst, src|
138+
cells[dst] = cells[src]
139+
end
140+
end
141+
142+
def extract_cells(relationships)
138143
extracted_cells = Hash[doc.xpath("/worksheet/sheetData/row/c").map do |cell_xml|
139144
key = ::Roo::Utils.ref_to_key(cell_xml['r'])
140145
[key, cell_from_xml(cell_xml, hyperlinks(relationships)[key])]
141146
end]
142-
if @options[:expand_merged_cells]
143-
# Fix up merged cells
144-
merges.each do |dst, src|
145-
extracted_cells[dst] = extracted_cells[src]
146-
end
147+
if @options[:expand_merged_ranges]
148+
expand_merged_ranges(extracted_cells)
147149
end
148150
extracted_cells
149151
end

0 commit comments

Comments
 (0)