lib/rubyXL/objects/query_table.rb



require 'rubyXL/objects/ooxml_object'
require 'rubyXL/objects/simple_types'
require 'rubyXL/objects/extensions'
require 'rubyXL/objects/relationships'
require 'rubyXL/objects/sheet_common'

# Query Tables
# https://msdn.microsoft.com/en-us/library/hh643563(v=office.12).aspx

module RubyXL
  # http://www.datypic.com/sc/ooxml/e-ssml_queryTableField-1.html
  class QueryTableField < OOXMLObject
    define_attribute(:id,            :uint, :required => true)
    define_attribute(:name,          RubyXL::ST_Xstring)
    define_attribute(:dataBound,     :bool, :default => true)
    define_attribute(:rowNumbers,    :bool, :default => false)
    define_attribute(:fillFormulas,  :bool, :default => false)
    define_attribute(:clipped,       :bool, :default => false)
    define_attribute(:tableColumnId, :uint, :default => 0)

    define_child_node(RubyXL::ExtensionStorageArea)

    define_element_name 'queryTableField'
  end

  # http://www.datypic.com/sc/ooxml/e-ssml_queryTableFields-1.html
  class QueryTableFields < OOXMLObject
    define_child_node(RubyXL::QueryTableField, :collection => :with_count, :accessor => :fields, :node_name => :queryTableField)
    define_element_name 'queryTableFields'
  end

  # http://www.datypic.com/sc/ooxml/e-ssml_deletedField-1.html
  class QueryTableDeletedField < OOXMLObject
    define_attribute(:name, RubyXL::ST_Xstring, :required => true)

    define_element_name 'deletedField'
  end

  # http://www.datypic.com/sc/ooxml/e-ssml_queryTableDeletedFields-1.html
  class QueryTableDeletedFields < OOXMLObject
    define_child_node(RubyXL::QueryTableDeletedField, :collection => :with_count, :accessor => :deleted_fields, :node_name => :deletedField)
    define_element_name 'queryTableDeletedFields'
  end

  # http://www.datypic.com/sc/ooxml/e-ssml_queryTableRefresh-1.html
  class QueryTableRefresh < OOXMLObject
    define_attribute(:preserveSortFilterLayout, :bool, :default => true)
    define_attribute(:fieldIdWrapped,           :bool, :default => false)
    define_attribute(:headersInLastRefresh,     :bool, :default => true)
    define_attribute(:minimumVersion,           :uint, :default => 0)
    define_attribute(:nextId,                   :uint, :default => 1)
    define_attribute(:unboundColumnsLeft,       :uint, :default => 0)
    define_attribute(:unboundColumnsRight,      :uint, :default => 0)

    define_child_node(RubyXL::QueryTableFields) # [1..1]
    define_child_node(RubyXL::QueryTableDeletedFields)
    define_child_node(RubyXL::SortState)
    define_child_node(RubyXL::ExtensionStorageArea)

    define_element_name 'queryTableRefresh'
  end

  # http://www.datypic.com/sc/ooxml/e-ssml_queryTable.html
  class QueryTable < OOXMLTopLevelObject
    CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml'
    REL_TYPE     = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/queryTable'

    include RubyXL::RelationshipSupport

    define_attribute(:name,                    RubyXL::ST_Xstring, :required => true)
    define_attribute(:headers,                 :bool, :default => true)
    define_attribute(:rowNumbers,              :bool, :default => false)
    define_attribute(:disableRefresh,          :bool, :default => false)
    define_attribute(:backgroundRefresh,       :bool, :default => true)
    define_attribute(:firstBackgroundRefresh,  :bool, :default => false)
    define_attribute(:refreshOnLoad,           :bool, :default => false)
    define_attribute(:growShrinkType,          RubyXL::ST_GrowShrinkType, :default => 'insertDelete')
    define_attribute(:fillFormulas,            :bool, :default => false)
    define_attribute(:removeDataOnSave,        :bool, :default => false)
    define_attribute(:disableEdit,             :bool, :default => false)
    define_attribute(:preserveFormatting,      :bool, :default => true)
    define_attribute(:adjustColumnWidth,       :bool, :default => true)
    define_attribute(:intermediate,            :bool, :default => false)
    define_attribute(:connectionId,            :uint, :required => true)
    define_attribute(:autoFormatId,            :uint)
    define_attribute(:applyNumberFormats,      :bool)
    define_attribute(:applyBorderFormats,      :bool)
    define_attribute(:applyFontFormats,        :bool)
    define_attribute(:applyPatternFormats,     :bool)
    define_attribute(:applyAlignmentFormats,   :bool)
    define_attribute(:applyWidthHeightFormats, :bool)

    define_child_node(RubyXL::QueryTableRefresh)
    define_child_node(RubyXL::ExtensionStorageArea)

    define_element_name 'queryTable'
    set_namespaces('http://schemas.openxmlformats.org/spreadsheetml/2006/main' => nil,
                   'http://schemas.openxmlformats.org/officeDocument/2006/relationships' => 'r')

    def xlsx_path
      ROOT.join('xl', 'queryTables', "queryTable#{file_index}.xml")
    end
  end
end