Class: RubyFromExcel::Table
- Inherits:
-
Object
- Object
- RubyFromExcel::Table
- Defined in:
- lib/excelfile/table.rb
Instance Attribute Summary collapse
-
#all ⇒ Object
readonly
Returns the value of attribute all.
-
#column_name_array ⇒ Object
readonly
Returns the value of attribute column_name_array.
-
#column_names ⇒ Object
readonly
Returns the value of attribute column_names.
-
#data ⇒ Object
readonly
Returns the value of attribute data.
-
#headers ⇒ Object
readonly
Returns the value of attribute headers.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#number_of_total_rows ⇒ Object
readonly
Returns the value of attribute number_of_total_rows.
-
#reference ⇒ Object
readonly
Returns the value of attribute reference.
-
#totals ⇒ Object
readonly
Returns the value of attribute totals.
-
#worksheet ⇒ Object
readonly
Returns the value of attribute worksheet.
Class Method Summary collapse
- .add(table) ⇒ Object
- .from_xml(worksheet, xml) ⇒ Object
- .reference_for(table_name, structured_reference, cell_making_the_reference = nil) ⇒ Object
- .reference_for_local_reference(cell, structured_reference) ⇒ Object
- .tables ⇒ Object
Instance Method Summary collapse
- #column(name) ⇒ Object
- #include?(cell) ⇒ Boolean
-
#initialize(worksheet, name, reference, column_name_array, number_of_total_rows) ⇒ Table
constructor
A new instance of Table.
- #inspect ⇒ Object
- #reference_for(structured_reference, cell_making_the_reference = nil) ⇒ Object
Constructor Details
#initialize(worksheet, name, reference, column_name_array, number_of_total_rows) ⇒ Table
Returns a new instance of Table.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/excelfile/table.rb', line 34 def initialize(worksheet,name,reference,column_name_array,number_of_total_rows) @worksheet = worksheet @name = name @reference = reference @column_name_array = column_name_array @number_of_total_rows = number_of_total_rows @all = Area.new(worksheet,*reference.split(':')) index_of_first_total_row = -number_of_total_rows.to_i @data = @all.rows(1,index_of_first_total_row - 1) @headers = @all.row(0) @totals = @all.rows(index_of_first_total_row,-1) @column_names = {} column_name_array.each_with_index do |name,index| @column_names[name.strip.downcase] = index # column['id'].to_i end Table.add(self) if $DEBUG RubyFromExcel.debug(:tables,"#{worksheet.name}.#{name} -> Table #{reference.inspect},#{column_name_array.inspect},#{number_of_total_rows}") end end |
Instance Attribute Details
#all ⇒ Object (readonly)
Returns the value of attribute all.
28 29 30 |
# File 'lib/excelfile/table.rb', line 28 def all @all end |
#column_name_array ⇒ Object (readonly)
Returns the value of attribute column_name_array.
28 29 30 |
# File 'lib/excelfile/table.rb', line 28 def column_name_array @column_name_array end |
#column_names ⇒ Object (readonly)
Returns the value of attribute column_names.
28 29 30 |
# File 'lib/excelfile/table.rb', line 28 def column_names @column_names end |
#data ⇒ Object (readonly)
Returns the value of attribute data.
28 29 30 |
# File 'lib/excelfile/table.rb', line 28 def data @data end |
#headers ⇒ Object (readonly)
Returns the value of attribute headers.
28 29 30 |
# File 'lib/excelfile/table.rb', line 28 def headers @headers end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
28 29 30 |
# File 'lib/excelfile/table.rb', line 28 def name @name end |
#number_of_total_rows ⇒ Object (readonly)
Returns the value of attribute number_of_total_rows.
28 29 30 |
# File 'lib/excelfile/table.rb', line 28 def number_of_total_rows @number_of_total_rows end |
#reference ⇒ Object (readonly)
Returns the value of attribute reference.
28 29 30 |
# File 'lib/excelfile/table.rb', line 28 def reference @reference end |
#totals ⇒ Object (readonly)
Returns the value of attribute totals.
28 29 30 |
# File 'lib/excelfile/table.rb', line 28 def totals @totals end |
#worksheet ⇒ Object (readonly)
Returns the value of attribute worksheet.
28 29 30 |
# File 'lib/excelfile/table.rb', line 28 def worksheet @worksheet end |
Class Method Details
.add(table) ⇒ Object
24 25 26 |
# File 'lib/excelfile/table.rb', line 24 def self.add(table) tables[table.name.downcase] = table end |
.from_xml(worksheet, xml) ⇒ Object
30 31 32 |
# File 'lib/excelfile/table.rb', line 30 def self.from_xml(worksheet,xml) Table.new(worksheet,xml['displayName'],xml['ref'],xml.css('tableColumn').map {|c| c['name']}.to_a,xml['totalsRowCount']) end |
.reference_for(table_name, structured_reference, cell_making_the_reference = nil) ⇒ Object
8 9 10 11 12 |
# File 'lib/excelfile/table.rb', line 8 def self.reference_for(table_name,structured_reference,cell_making_the_reference = nil) # puts "'#{table_name.downcase}' not found in #{tables.keys}" unless tables.include?(table_name.downcase) return ":ref" unless tables.include?(table_name.downcase) tables[table_name.downcase].reference_for(structured_reference,cell_making_the_reference) end |
.reference_for_local_reference(cell, structured_reference) ⇒ Object
14 15 16 17 18 |
# File 'lib/excelfile/table.rb', line 14 def self.reference_for_local_reference(cell,structured_reference) table = tables.find { |n,t| t.include?(cell) } return ":ref" unless table table.last.reference_for(structured_reference,cell.reference) end |
.tables ⇒ Object
20 21 22 |
# File 'lib/excelfile/table.rb', line 20 def self.tables @@tables ||= {} end |
Instance Method Details
#column(name) ⇒ Object
55 56 57 58 59 |
# File 'lib/excelfile/table.rb', line 55 def column(name) name = $1 if name.to_s =~ /^(\d+)\.0+$/ return :na unless column = column_names[name.to_s.downcase] data.column(column) end |
#include?(cell) ⇒ Boolean
94 95 96 |
# File 'lib/excelfile/table.rb', line 94 def include?(cell) @all.include_cell?(cell) end |
#inspect ⇒ Object
90 91 92 |
# File 'lib/excelfile/table.rb', line 90 def inspect %Q{'Table.new(#{worksheet},#{name.inspect},#{reference.inspect},#{column_name_array.inspect},#{number_of_total_rows})'} end |
#reference_for(structured_reference, cell_making_the_reference = nil) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/excelfile/table.rb', line 61 def reference_for(structured_reference,cell_making_the_reference = nil) structured_reference.strip! return this_row(cell_making_the_reference) if structured_reference == '#This Row' if structured_reference =~ /\[(.*?)\],\[(.*?)\]:\[(.*?)\]/ return this_row_area_intersection(cell_making_the_reference,area_for_simple_reference($2),area_for_simple_reference($3)) if $1 == '#This Row' # return all.column(column_names[$2]) if $1 == '#All' # return intersection(area_for_simple_reference($1),area_for_simple_reference($2)) elsif structured_reference =~ /\[(.*?)\],\[(.*?)\]/ return this_row_intersection(cell_making_the_reference,area_for_simple_reference($2)) if $1 == '#This Row' return all.column(column_names[$2.to_s.downcase]) if $1 == '#All' return intersection(area_for_simple_reference($1),area_for_simple_reference($2)) end if cell_making_the_reference if cell_making_the_reference.worksheet == self.worksheet if data.include?(cell_making_the_reference) case structured_reference when /#totals/i, /#headers/i return this_column_intersection(cell_making_the_reference,area_for_simple_reference(structured_reference)) when /^#/i return area_for_simple_reference(structured_reference) else return this_row_intersection(cell_making_the_reference,area_for_simple_reference(structured_reference)) end end end end return area_for_simple_reference(structured_reference) end |