From 80252d12123118f2ebbd9736931f3c0150cf1653 Mon Sep 17 00:00:00 2001 From: Stefan Daschek Date: Tue, 15 May 2012 20:04:35 +0200 Subject: [PATCH] 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". --- lib/axlsx/workbook/worksheet/worksheet.rb | 2 +- test/workbook/worksheet/tc_worksheet.rb | 10 +++++++++- 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 @@ def merge_cells(cells) @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 @@ def test_merge_cells 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 }