@@ -121,29 +121,31 @@ def extract_hyperlinks(relationships)
121
121
end . compact ]
122
122
end
123
123
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
135
133
end
136
134
end
137
135
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 )
138
143
extracted_cells = Hash [ doc . xpath ( "/worksheet/sheetData/row/c" ) . map do |cell_xml |
139
144
key = ::Roo ::Utils . ref_to_key ( cell_xml [ 'r' ] )
140
145
[ key , cell_from_xml ( cell_xml , hyperlinks ( relationships ) [ key ] ) ]
141
146
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 )
147
149
end
148
150
extracted_cells
149
151
end
0 commit comments