class Table

Attributes

name[RW]

Public Class Methods

new(name,worksheet,reference,number_of_total_rows,*column_name_array) click to toggle source
# File src/excel/table.rb, line 8
def initialize(name,worksheet,reference,number_of_total_rows,*column_name_array)
  @name, @worksheet, @area, @number_of_total_rows, @column_name_array = name, worksheet.to_sym, Area.for(reference), number_of_total_rows.to_i, column_name_array.map { |c| c.strip.downcase }
  @area.calculate_excel_variables
  @data_area = Area.for("#{@area.excel_start.offset(1,0)}:#{@area.excel_finish.offset(-@number_of_total_rows,0)}")
  @data_area.calculate_excel_variables
end

Public Instance Methods

all() click to toggle source
# File src/excel/table.rb, line 110
def all
  ast_for_area @area.excel_start, @area.excel_finish
end
ast_for_area(start,finish) click to toggle source
# File src/excel/table.rb, line 118
def ast_for_area(start,finish)
  [:sheet_reference,@worksheet,[:area,start.to_sym,finish.to_sym]]
end
ast_for_cell(ref) click to toggle source
# File src/excel/table.rb, line 122
def ast_for_cell(ref)
  [:sheet_reference,@worksheet,[:cell,ref.to_sym]]
end
column_number_for(name) click to toggle source
# File src/excel/table.rb, line 130
def column_number_for(name)
  name = name.strip.downcase.gsub("'#","#")
  @column_name_array.find_index(name)
end
data() click to toggle source
# File src/excel/table.rb, line 114
def data
  ast_for_area @data_area.excel_start, @data_area.excel_finish
end
includes?(sheet,reference) click to toggle source
# File src/excel/table.rb, line 135
def includes?(sheet,reference)
  return false unless @worksheet == sheet
  @area.includes?(reference)
end
ref_error() click to toggle source
# File src/excel/table.rb, line 126
def ref_error
  [:error,"#REF!"]
end
reference_for(table_name,structured_reference,calling_worksheet,calling_cell, must_be_area = false) click to toggle source
# File src/excel/table.rb, line 15
def reference_for(table_name,structured_reference,calling_worksheet,calling_cell, must_be_area = false)
  raise NotSupportedException.new("Local table reference not supported in #{structured_reference.inspect}") unless table_name

  case structured_reference
  when /\[#Headers\],\[(.*?)\]:\[(.*?)\]/io
    column_number_start = column_number_for($1)
    column_number_finish = column_number_for($2)
    return ref_error unless column_number_start && column_number_finish
    ast_for_area @area.excel_start.offset(0,column_number_start), @area.excel_start.offset(0,column_number_finish)

  when /\[#Totals\],\[(.*?)\]:\[(.*?)\]/io
    column_number_start = column_number_for($1)
    column_number_finish = column_number_for($2)
    return ref_error unless column_number_start && column_number_finish
    ast_for_area @area.excel_start.offset(@area.height,column_number_start), @area.excel_start.offset(@area.height,column_number_finish)

  when /\[#This Row\],\[(.*?)\]:\[(.*?)\]/io
    r = Reference.for(calling_cell)
    r.calculate_excel_variables
    row = r.excel_row_number
    column_number_start = column_number_for($1)
    column_number_finish = column_number_for($2)
    return ref_error unless column_number_start && column_number_finish
    ast_for_area @area.excel_start.offset(row - @area.excel_start.excel_row_number,column_number_start), @area.excel_start.offset(row - @area.excel_start.excel_row_number,column_number_finish)

  when /\[(.*?)\]:\[(.*?)\]/io
    column_number_start = column_number_for($1)
    column_number_finish = column_number_for($2)
    return ref_error unless column_number_start && column_number_finish
    ast_for_area @area.excel_start.offset(1,column_number_start), @area.excel_start.offset(@area.height - @number_of_total_rows,column_number_finish)

  when /\[#Headers\],\[(.*?)\]/io
    column_number = column_number_for($1)
    return ref_error unless column_number
    ast_for_cell @area.excel_start.offset(0,column_number)

  when /\[#Totals\],\[(.*?)\]/io
    column_number = column_number_for($1)
    return ref_error unless column_number
    ast_for_cell @area.excel_start.offset(@area.height,column_number)

  when /\[#This Row\],\[(.*?)\]/io
    r = Reference.for(calling_cell)
    r.calculate_excel_variables
    row = r.excel_row_number
    column_number = column_number_for($1)
    return ref_error unless column_number
    ast_for_cell @area.excel_start.offset(row - @area.excel_start.excel_row_number,column_number)

  when /#Headers/io
    if calling_worksheet == @worksheet && @data_area.includes?(calling_cell)
      r = Reference.for(calling_cell)
      r.calculate_excel_variables
      ast_for_cell "#{r.excel_column}#{@area.excel_start.excel_row_number}"
    else
      ast_for_area @area.excel_start.offset(0,0), @area.excel_start.offset(0,@area.width)
    end

  when /#Totals/io
    if calling_worksheet == @worksheet && @data_area.includes?(calling_cell)
      r = Reference.for(calling_cell)
      r.calculate_excel_variables
      ast_for_cell "#{r.excel_column}#{@area.excel_finish.excel_row_number}"
    else
      ast_for_area @area.excel_start.offset(@area.height,0), @area.excel_start.offset(@area.height,@area.width)
    end

  when /#Data/io, ""
    ast_for_area @data_area.excel_start, @data_area.excel_finish

  when /#All/io
    ast_for_area @area.excel_start, @area.excel_finish

  when /#This Row/io
    r = Reference.for(calling_cell)
    r.calculate_excel_variables
    row = r.excel_row_number
    ast_for_area "#{@area.excel_start.excel_column}#{row}", "#{@area.excel_finish.excel_column}#{row}"

  else
    if !must_be_area && (calling_worksheet == @worksheet) && @data_area.includes?(calling_cell)
      r = Reference.for(calling_cell)
      r.calculate_excel_variables
      row = r.excel_row_number
      column_number = column_number_for(structured_reference)
      return ref_error unless column_number
      ast_for_cell @area.excel_start.offset(row - @area.excel_start.excel_row_number,column_number)
    else
      column_number = column_number_for(structured_reference)
      return ref_error unless column_number
      ast_for_area @area.excel_start.offset(1,column_number), @area.excel_start.offset(@area.height - @number_of_total_rows,column_number)
    end
  end
end