class OoxmlParser::Chart

Class for working with Chart data

Attributes

alternate_content[RW]
axis_ids[R]

@return [Array, ValuedChild] array axis id

axises[RW]
data[RW]
display_labels[RW]
grouping[RW]
legend[RW]
pivot_formats[RW]

@return [PivotFormats] list of pivot formats

plot_area[RW]

@return [PlotArea] plot area data

series[RW]

@return [Array, Series] series of chart

shape_properties[RW]
title[RW]
type[RW]
vary_colors[R]

@return [True, False] This element specifies that each data marker in the series has a different color. ECMA-376 (5th Edition). 21.2.2.227

view_3d[RW]

@return [View3D] properties of 3D view

Public Class Methods

new(parent: nil) click to toggle source
Calls superclass method
# File lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart.rb, line 32
def initialize(parent: nil)
  @axis_ids = []
  @type = ''
  @data = []
  @grouping = nil
  @title = nil
  @legend = nil
  @axises = []
  @series = []
  super
end

Public Instance Methods

parse() click to toggle source

Parse Chart data @return [Chart] result of parsing

# File lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart.rb, line 79
def parse
  chart_xml = parse_xml(OOXMLDocumentObject.current_xml)
  chart_xml.xpath('*').each do |chart_node|
    case chart_node.name
    when 'chartSpace'
      chart_node.xpath('*').each do |chart_space_node_child|
        case chart_space_node_child.name
        when 'AlternateContent'
          @alternate_content = AlternateContent.new(parent: self).parse(chart_space_node_child)
        when 'spPr'
          @shape_properties = DocxShapeProperties.new(parent: self).parse(chart_space_node_child)
        when 'chart'
          chart_space_node_child.xpath('*').each do |chart_node_child|
            case chart_node_child.name
            when 'plotArea'
              chart_node_child.xpath('*').each do |plot_area_node_child|
                next unless type.empty?

                case plot_area_node_child.name
                when 'barChart'
                  @type = :bar
                  bar_dir_node = plot_area_node_child.xpath('c:barDir')
                  @type = :column if bar_dir_node.first.attribute('val').value == 'col'
                  parse_properties(plot_area_node_child)
                when 'lineChart'
                  @type = :line
                  parse_properties(plot_area_node_child)
                when 'areaChart'
                  @type = :area
                  parse_properties(plot_area_node_child)
                when 'bubbleChart'
                  @type = :bubble
                  parse_properties(plot_area_node_child)
                when 'doughnutChart'
                  @type = :doughnut
                  parse_properties(plot_area_node_child)
                when 'pieChart'
                  @type = :pie
                  parse_properties(plot_area_node_child)
                when 'scatterChart'
                  @type = :point
                  parse_properties(plot_area_node_child)
                when 'radarChart'
                  @type = :radar
                  parse_properties(plot_area_node_child)
                when 'stockChart'
                  @type = :stock
                  parse_properties(plot_area_node_child)
                when 'surface3DChart'
                  @type = :surface_3d
                  parse_properties(plot_area_node_child)
                when 'line3DChart'
                  @type = :line_3d
                  parse_properties(plot_area_node_child)
                when 'bar3DChart'
                  @type = :bar_3d
                  parse_properties(plot_area_node_child)
                when 'pie3DChart'
                  @type = :pie_3d
                  parse_properties(plot_area_node_child)
                end
              end
              parse_axis(chart_node_child)
              @plot_area = PlotArea.new(parent: self).parse(chart_node_child)
            when 'title'
              @title = ChartAxisTitle.new(parent: self).parse(chart_node_child)
            when 'legend'
              @legend = ChartLegend.new(parent: self).parse(chart_node_child)
            when 'view3D'
              @view_3d = View3D.new(parent: self).parse(chart_node_child)
            when 'pivotFmts'
              @pivot_formats = PivotFormats.new(parent: self).parse(chart_node_child)
            end
          end
        end
      end
    end
  end
  self
end
parse_properties(chart_prop_node) click to toggle source

Parse properties of Chart @param chart_prop_node [Nokogiri::XML:Element] node to parse @return [void]

# File lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart.rb, line 47
def parse_properties(chart_prop_node)
  chart_prop_node.xpath('*').each do |chart_props_node_child|
    case chart_props_node_child.name
    when 'axId'
      @axis_ids << ValuedChild.new(:integer, parent: self).parse(chart_props_node_child)
    when 'grouping'
      @grouping = chart_props_node_child.attribute('val').value.to_sym
    when 'ser'
      @series << Series.new(parent: self).parse(chart_props_node_child)
      val = case @type
            when :point, :bubble
              chart_props_node_child.xpath('c:yVal')[0]
            else
              chart_props_node_child.xpath('c:val')[0]
            end
      next unless val
      next if val.xpath('c:numRef').empty?

      @data << ChartCellsRange.new(parent: self).parse(val.xpath('c:numRef').first).dup
    when 'dLbls'
      @display_labels = DisplayLabelsProperties.new(parent: self).parse(chart_props_node_child)
    when 'varyColors'
      @vary_colors = option_enabled?(chart_props_node_child)
    end
  end
end

Private Instance Methods

parse_axis(node) click to toggle source

Perform parsing of axis info @param node [Nokogiri::XML:Element] node to parse @return [void]

# File lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart.rb, line 165
def parse_axis(node)
  node.xpath('*').each do |node_child|
    case node_child.name
    when 'catAx', 'valAx'
      @axises << ChartAxis.new(parent: self).parse(node_child)
    end
  end
end