Class: Axlsx::PivotTable
- Inherits:
-
Object
- Object
- Axlsx::PivotTable
- Includes:
- OptionsParser
- Defined in:
- lib/axlsx/workbook/worksheet/pivot_table.rb
Overview
Worksheet#add_pivot_table is the recommended way to create tables for your worksheets.
Table
Instance Attribute Summary collapse
-
#columns ⇒ Array
The columns.
-
#data ⇒ Array
The data.
- #data_sheet ⇒ Object
-
#name ⇒ String
readonly
The name of the table.
-
#pages ⇒ String
The pages.
-
#range ⇒ String
The range where the data for this pivot table lives.
-
#ref ⇒ String
readonly
The reference to the table data.
-
#rows ⇒ Array
The rows.
-
#sheet ⇒ String
readonly
The name of the sheet.
Instance Method Summary collapse
-
#cache_definition ⇒ PivotTableCacheDefinition
The cache_definition for this pivot table.
-
#header_cell_refs ⇒ Array
References for header cells.
-
#header_cell_values ⇒ Array
The values in the header cells collection.
-
#header_cells ⇒ Array
The header cells for the pivot table.
-
#header_cells_count ⇒ Integer
The number of cells in the header_cells collection.
-
#header_index_of(value) ⇒ Integer
The index of a given value in the header cells.
-
#index ⇒ Integer
The index of this chart in the workbooks charts collection.
-
#initialize(ref, range, sheet, options = {}) {|_self| ... } ⇒ PivotTable
constructor
Creates a new PivotTable object.
-
#pn ⇒ String
The part name for this table.
-
#relationships ⇒ Relationships
The relationships for this pivot table.
-
#rels_pn ⇒ String
The relationship part name of this pivot table.
-
#to_xml_string(str = '') ⇒ String
Serializes the object.
Methods included from OptionsParser
Constructor Details
#initialize(ref, range, sheet, options = {}) {|_self| ... } ⇒ PivotTable
Creates a new PivotTable object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 16 def initialize(ref, range, sheet, ={}) @ref = ref self.range = range @sheet = sheet @sheet.workbook.pivot_tables << self @name = "PivotTable#{index+1}" @data_sheet = nil @rows = [] @columns = [] @data = [] @pages = [] @subtotal = nil yield self if block_given? end |
Instance Attribute Details
#columns ⇒ Array
The columns
81 82 83 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 81 def columns @columns end |
#data ⇒ Array
The data
94 95 96 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 94 def data @data end |
#data_sheet ⇒ Object
49 50 51 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 49 def data_sheet @data_sheet || @sheet end |
#name ⇒ String (readonly)
The name of the table.
38 39 40 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 38 def name @name end |
#pages ⇒ String
The pages
114 115 116 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 114 def pages @pages end |
#range ⇒ String
The range where the data for this pivot table lives.
55 56 57 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 55 def range @range end |
#ref ⇒ String (readonly)
The reference to the table data
34 35 36 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 34 def ref @ref end |
#rows ⇒ Array
The rows
67 68 69 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 67 def rows @rows end |
#sheet ⇒ String (readonly)
The name of the sheet.
42 43 44 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 42 def sheet @sheet end |
Instance Method Details
#cache_definition ⇒ PivotTableCacheDefinition
The cache_definition for this pivot table
145 146 147 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 145 def cache_definition @cache_definition ||= PivotTableCacheDefinition.new(self) end |
#header_cell_refs ⇒ Array
References for header cells
214 215 216 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 214 def header_cell_refs Axlsx::range_to_a(header_range).first end |
#header_cell_values ⇒ Array
The values in the header cells collection
226 227 228 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 226 def header_cell_values header_cells.map(&:value) end |
#header_cells ⇒ Array
The header cells for the pivot table
220 221 222 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 220 def header_cells data_sheet[header_range] end |
#header_cells_count ⇒ Integer
The number of cells in the header_cells collection
232 233 234 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 232 def header_cells_count header_cells.count end |
#header_index_of(value) ⇒ Integer
The index of a given value in the header cells
238 239 240 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 238 def header_index_of(value) header_cell_values.index(value) end |
#index ⇒ Integer
The index of this chart in the workbooks charts collection
127 128 129 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 127 def index @sheet.workbook.pivot_tables.index(self) end |
#pn ⇒ String
The part name for this table
133 134 135 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 133 def pn "#{PIVOT_TABLE_PN % (index+1)}" end |
#relationships ⇒ Relationships
The relationships for this pivot table.
151 152 153 154 155 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 151 def relationships r = Relationships.new r << Relationship.new(cache_definition, PIVOT_TABLE_CACHE_DEFINITION_R, "../#{cache_definition.pn}") r end |
#rels_pn ⇒ String
The relationship part name of this pivot table
139 140 141 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 139 def rels_pn "#{PIVOT_TABLE_RELS_PN % (index+1)}" end |
#to_xml_string(str = '') ⇒ String
Serializes the object
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 160 def to_xml_string(str = '') str << '<?xml version="1.0" encoding="UTF-8"?>' str << '<pivotTableDefinition xmlns="' << XML_NS << '" name="' << name << '" cacheId="' << cache_definition.cache_id.to_s << '" dataOnRows="1" applyNumberFormats="0" applyBorderFormats="0" applyFontFormats="0" applyPatternFormats="0" applyAlignmentFormats="0" applyWidthHeightFormats="1" dataCaption="Data" showMultipleLabel="0" showMemberPropertyTips="0" useAutoFormatting="1" indent="0" compact="0" compactData="0" gridDropZones="1" multipleFieldFilters="0">' str << '<location firstDataCol="1" firstDataRow="1" firstHeaderRow="1" ref="' << ref << '"/>' str << '<pivotFields count="' << header_cells_count.to_s << '">' header_cell_values.each do |cell_value| str << pivot_field_for(cell_value) end str << '</pivotFields>' if rows.empty? str << '<rowFields count="1"><field x="-2"/></rowFields>' str << '<rowItems count="2"><i><x/></i> <i i="1"><x v="1"/></i></rowItems>' else str << '<rowFields count="' << rows.size.to_s << '">' rows.each do |row_value| str << '<field x="' << header_index_of(row_value).to_s << '"/>' end str << '</rowFields>' str << '<rowItems count="' << rows.size.to_s << '">' rows.size.times do |i| str << '<i/>' end str << '</rowItems>' end if columns.empty? str << '<colItems count="1"><i/></colItems>' else str << '<colFields count="' << columns.size.to_s << '">' columns.each do |column_value| str << '<field x="' << header_index_of(column_value).to_s << '"/>' end str << '</colFields>' end unless pages.empty? str << '<pageFields count="' << pages.size.to_s << '">' pages.each do |page_value| str << '<pageField fld="' << header_index_of(page_value).to_s << '"/>' end str << '</pageFields>' end unless data.empty? str << "<dataFields count=\"#{data.size}\">" data.each do |datum_value| str << "<dataField name='#{@subtotal} of #{datum_value[:ref]}' fld='#{header_index_of(datum_value[:ref])}' baseField='0' baseItem='0'" str << " subtotal='#{datum_value[:subtotal]}' " if datum_value[:subtotal] str << "/>" end str << '</dataFields>' end str << '</pivotTableDefinition>' end |