Sha256: b1ab6ccf764c7452f17e5117a01fd6683cc32ed60564b1bc9e4ab03804fb353b

Contents?: true

Size: 1.8 KB

Versions: 1

Compression:

Stored size: 1.8 KB

Contents

require 'rubyXL/objects/ooxml_object'
require 'rubyXL/objects/text'
require 'rubyXL/objects/extensions'

module RubyXL

  # http://www.schemacentral.com/sc/ooxml/e-ssml_sst.html
  class SharedStringsTable < OOXMLTopLevelObject
    CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml'
    REL_TYPE     = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings'

    # According to http://msdn.microsoft.com/en-us/library/office/gg278314.aspx,
    # +count+ and +uniqueCount+ may be either both missing, or both present. Need to validate.
    define_attribute(:uniqueCount,  :int)
    define_child_node(RubyXL::RichText, :collection => :with_count, :node_name => 'si', :accessor => :strings)
    define_child_node(RubyXL::ExtensionStorageArea)
    define_element_name 'sst'
    set_namespaces('http://schemas.openxmlformats.org/spreadsheetml/2006/main' => nil)

    def initialize(*params)
      super
      # So far, going by the structure that the original creator had in mind. However,
      # since the actual implementation is now extracted into a separate class,
      # we will be able to transparrently change it later if needs be.
      @index_by_content = {}
    end

    def before_write_xml
      super
      self.unique_count = self.count
      self.count > 0
    end

    def [](index)
      strings[index]
    end

    def empty?
      strings.empty?
    end

    def add(str, index = nil)
      index ||= strings.size
      strings[index] = RubyXL::Text.new(:value => str)
      @index_by_content[str] = index
    end

    def get_index(str, add_if_missing = false)
      index = @index_by_content[str]
      index = add(str) if index.nil? && add_if_missing
      index
    end

    def xlsx_path
      ROOT.join('xl', 'sharedStrings.xml')
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rubyXL-3.3.13 lib/rubyXL/objects/shared_strings.rb