From 645cab50a9dcba603d34b0a2e20be5d2420e1905 Mon Sep 17 00:00:00 2001 From: Jurriaan Pruis Date: Fri, 23 Mar 2012 15:36:02 +0100 Subject: Added to workbook --- lib/axlsx/workbook/workbook.rb | 7 +++++++ lib/axlsx/workbook/worksheet/worksheet.rb | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/lib/axlsx/workbook/workbook.rb b/lib/axlsx/workbook/workbook.rb index a8e0a1af..d57cf8a3 100644 --- a/lib/axlsx/workbook/workbook.rb +++ b/lib/axlsx/workbook/workbook.rb @@ -206,6 +206,13 @@ require 'axlsx/workbook/worksheet/table.rb' xml.sheet(:name=>sheet.name, :sheetId=>index+1, :"r:id"=>sheet.rId) end } + xml.definedNames { + @worksheets.each_with_index do |sheet, index| + if sheet.auto_filter + xml.definedName(sheet.abs_auto_filter, :name => '_xlnm._FilterDatabase', :localSheetId => index, :hidden => 1) + end + end + } } end builder.to_xml(:save_with => 0) diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb index 5325294f..88d29432 100644 --- a/lib/axlsx/workbook/worksheet/worksheet.rb +++ b/lib/axlsx/workbook/worksheet/worksheet.rb @@ -210,6 +210,14 @@ module Axlsx @name=v end + # The absolute auto filter range + # @see auto_filter + def abs_auto_filter + "'#{@name}'!#{@auto_filter.split(':').collect { |name| + name_to_cell(name).r_abs + }.join(':')}" if @auto_filter + end + # The auto filter range for the worksheet # @param [String] v # @see auto_filter -- cgit v1.2.3 From 5afd30be1774fb5255dad2eb18c700d0d8f4a628 Mon Sep 17 00:00:00 2001 From: Jurriaan Pruis Date: Fri, 23 Mar 2012 16:12:21 +0100 Subject: Use Alxsx.cell_range --- lib/axlsx/workbook/worksheet/worksheet.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb index 88d29432..3f651078 100644 --- a/lib/axlsx/workbook/worksheet/worksheet.rb +++ b/lib/axlsx/workbook/worksheet/worksheet.rb @@ -213,9 +213,7 @@ module Axlsx # The absolute auto filter range # @see auto_filter def abs_auto_filter - "'#{@name}'!#{@auto_filter.split(':').collect { |name| - name_to_cell(name).r_abs - }.join(':')}" if @auto_filter + Axlsx.cell_range(@auto_filter.split(':').collect { |name| name_to_cell(name)}) if @auto_filter end # The auto filter range for the worksheet -- cgit v1.2.3 From 78095afd0fe199603cf7bc6e33d6ff9e10f906dd Mon Sep 17 00:00:00 2001 From: Jurriaan Pruis Date: Wed, 28 Mar 2012 17:37:10 +0200 Subject: Updated test cases for Auto Filter fix --- test/workbook/worksheet/tc_worksheet.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/test/workbook/worksheet/tc_worksheet.rb b/test/workbook/worksheet/tc_worksheet.rb index d9a89a69..4f66f250 100644 --- a/test/workbook/worksheet/tc_worksheet.rb +++ b/test/workbook/worksheet/tc_worksheet.rb @@ -2,8 +2,9 @@ require 'tc_helper.rb' class TestWorksheet < Test::Unit::TestCase def setup - p = Axlsx::Package.new - @ws = p.workbook.add_worksheet + @p = Axlsx::Package.new + @wb = @p.workbook + @ws = @wb.add_worksheet end @@ -201,6 +202,8 @@ class TestWorksheet < Test::Unit::TestCase @ws.auto_filter = "A1:B1" doc = Nokogiri::XML(@ws.to_xml_string) assert_equal(doc.xpath('//xmlns:worksheet/xmlns:autoFilter[@ref="A1:B1"]').size, 1) + doc2 = Nokogiri::XML(@wb.to_xml) + assert_equal(doc2.xpath('//xmlns:workbook/xmlns:definedNames/xmlns:definedName').inner_text, @ws.abs_auto_filter) end def test_to_xml_string_merge_cells @@ -234,6 +237,13 @@ class TestWorksheet < Test::Unit::TestCase assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts/xmlns:tablePart[@r:id="rId1"]').size, 1) end + def test_abs_auto_filter + @ws.add_row [1, "two", 3] + @ws.auto_filter = "A1:C1" + doc = Nokogiri::XML(@wb.to_xml) + assert_equal(doc.xpath('//xmlns:workbook/xmlns:definedNames/xmlns:definedName').inner_text, "'Sheet1'!$A$1:$C$1") + end + def test_to_xml schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD)) doc = Nokogiri::XML(@ws.to_xml) -- cgit v1.2.3