summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStefan Daschek <[email protected]>2012-05-15 20:04:35 +0200
committerStefan Daschek <[email protected]>2012-05-15 20:04:35 +0200
commit80252d12123118f2ebbd9736931f3c0150cf1653 (patch)
tree369e496714d95748cf6e1783b9432e64bf236617
parent9237511af7a89dca97b4583bba41cd15317f25ec (diff)
downloadcaxlsx-80252d12123118f2ebbd9736931f3c0150cf1653.tar.gz
caxlsx-80252d12123118f2ebbd9736931f3c0150cf1653.zip
Worksheet#merge_cells sometimes produced invalid merge ranges when given an array of cells.
Merging e.g. cells A9 and A10 resulted in invalid range "A10:A9".
-rw-r--r--lib/axlsx/workbook/worksheet/worksheet.rb2
-rw-r--r--test/workbook/worksheet/tc_worksheet.rb10
2 files changed, 10 insertions, 2 deletions
diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb
index 2205b97d..887968e0 100644
--- a/lib/axlsx/workbook/worksheet/worksheet.rb
+++ b/lib/axlsx/workbook/worksheet/worksheet.rb
@@ -204,7 +204,7 @@ module Axlsx
@merged_cells << if cells.is_a?(String)
cells
elsif cells.is_a?(Array)
- cells = cells.sort { |x, y| x.r <=> y.r }
+ cells = cells.sort { |x, y| [x.index, x.row.index] <=> [y.index, y.row.index] }
"#{cells.first.r}:#{cells.last.r}"
end
end
diff --git a/test/workbook/worksheet/tc_worksheet.rb b/test/workbook/worksheet/tc_worksheet.rb
index 5366ab3d..81179dbd 100644
--- a/test/workbook/worksheet/tc_worksheet.rb
+++ b/test/workbook/worksheet/tc_worksheet.rb
@@ -382,7 +382,15 @@ class TestWorksheet < Test::Unit::TestCase
assert_equal(@ws.merged_cells.size, 3)
assert_equal(@ws.merged_cells.last, "A3:B3")
end
-
+
+ def test_merge_cells_sorts_correctly_by_row_when_given_array
+ 10.times do |i|
+ @ws.add_row [i]
+ end
+ @ws.merge_cells [@ws.rows[8].cells.first, @ws.rows[9].cells.first]
+ assert_equal "A9:A10", @ws.merged_cells.first
+ end
+
def test_auto_filter
assert(@ws.auto_filter.nil?)
assert_raise(ArgumentError) { @ws.auto_filter = 123 }