@@ -682,6 +682,53 @@ def outline_level_columns(start_index, end_index, level = 1, collapsed = true)
682682 outline column_info , ( start_index ..end_index ) , level , collapsed
683683 end
684684
685+ # The excel-style reference of the top-left cell of this worksheet, e.g., A1
686+ # @return String
687+ def top_left_reference
688+ raise "worksheet has no data" if rows . empty? or rows . first . empty?
689+ rows . first . first . r
690+ end
691+
692+ # The excel-style reference of the bottom-right cell of this worksheet, e.g., D5
693+ # This method is useful when you want to apply auto_filter or table to dynamic length data.
694+ #
695+ # @example
696+ # Axlsx::Package.new do |p|
697+ # p.workbook.add_worksheet(:name => "Table 2") do |sheet|
698+ # sheet.add_row ["Build Matrix"]
699+ # sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
700+ # sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
701+ # sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
702+ # sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
703+ # sheet.auto_filter = "A2:#{sheet.bottom_right_reference}" # => 'A2:D5'
704+ # sheet.auto_filter.add_column 3, :filters, :filter_items => ['1.9.2']
705+ # end
706+ # end
707+ # @return String
708+ def bottom_right_reference
709+ raise "worksheet has no data" if rows . empty? or rows . last . empty?
710+ rows . last . last . r
711+ end
712+
713+ # The excel-style reference of the range of this worksheet, e.g., A1:D5
714+ # This method is useful when you just want to apply auto_filter or table to whole worksheet.
715+ #
716+ # @example
717+ # Axlsx::Package.new do |p|
718+ # p.workbook.add_worksheet(:name => "Table") do |sheet|
719+ # sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
720+ # sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
721+ # sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
722+ # sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
723+ # sheet.auto_filter = sheet.range_reference # => "A1:D4"
724+ # sheet.auto_filter.add_column 3, :filters, :filter_items => ['1.9.2']
725+ # end
726+ # end
727+ # @return String
728+ def range_reference
729+ "#{ top_left_reference } :#{ bottom_right_reference } "
730+ end
731+
685732 private
686733
687734 def xml_space
0 commit comments