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.
-
#no_subtotals_on_headers ⇒ Array
Defines the headers in which subtotals are not to be included.
-
#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.
-
#sort_on_headers ⇒ Hash
Defines the headers in which sort is applied.
-
#style_info ⇒ Hash
Style info for the pivot table.
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 31 32 33 |
# 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 @no_subtotals_on_headers = [] @sort_on_headers = {} @style_info = {} yield self if block_given? end |
Instance Attribute Details
#columns ⇒ Array
The columns
106 107 108 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 106 def columns @columns end |
#data ⇒ Array
The data
119 120 121 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 119 def data @data end |
#data_sheet ⇒ Object
75 76 77 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 75 def data_sheet @data_sheet || @sheet end |
#name ⇒ String (readonly)
The name of the table.
64 65 66 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 64 def name @name end |
#no_subtotals_on_headers ⇒ Array
Defines the headers in which subtotals are not to be included.
37 38 39 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 37 def no_subtotals_on_headers @no_subtotals_on_headers end |
#pages ⇒ String
The pages
142 143 144 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 142 def pages @pages end |
#range ⇒ String
The range where the data for this pivot table lives.
81 82 83 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 81 def range @range end |
#ref ⇒ String (readonly)
The reference to the table data
60 61 62 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 60 def ref @ref end |
#rows ⇒ Array
The rows
93 94 95 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 93 def rows @rows end |
#sheet ⇒ String (readonly)
The name of the sheet.
68 69 70 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 68 def sheet @sheet end |
#sort_on_headers ⇒ Hash
Defines the headers in which sort is applied.
Can be an array of headers to sort ascending by default, or a hash for specific control
(with headers as keys, :ascending
or :descending
as values).
Examples: ["year", "month"]
or {"year" => :descending, "month" => :descending}
45 46 47 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 45 def sort_on_headers @sort_on_headers end |
#style_info ⇒ Hash
Style info for the pivot table
56 57 58 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 56 def style_info @style_info end |
Instance Method Details
#cache_definition ⇒ PivotTableCacheDefinition
The cache_definition for this pivot table
173 174 175 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 173 def cache_definition @cache_definition ||= PivotTableCacheDefinition.new(self) end |
#header_cell_refs ⇒ Array
References for header cells
268 269 270 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 268 def header_cell_refs Axlsx.range_to_a(header_range).first end |
#header_cell_values ⇒ Array
The values in the header cells collection
280 281 282 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 280 def header_cell_values header_cells.map(&:value) end |
#header_cells ⇒ Array
The header cells for the pivot table
274 275 276 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 274 def header_cells data_sheet[header_range] end |
#header_cells_count ⇒ Integer
The number of cells in the header_cells collection
286 287 288 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 286 def header_cells_count header_cells.count end |
#header_index_of(value) ⇒ Integer
The index of a given value in the header cells
292 293 294 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 292 def header_index_of(value) header_cell_values.index(value) end |
#index ⇒ Integer
The index of this chart in the workbooks charts collection
155 156 157 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 155 def index @sheet.workbook.pivot_tables.index(self) end |
#pn ⇒ String
The part name for this table
161 162 163 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 161 def pn format(PIVOT_TABLE_PN, index + 1) end |
#relationships ⇒ Relationships
The relationships for this pivot table.
179 180 181 182 183 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 179 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
167 168 169 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 167 def rels_pn format(PIVOT_TABLE_RELS_PN, index + 1) end |
#to_xml_string(str = +'')) ⇒ String
Serializes the object
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 |
# File 'lib/axlsx/workbook/worksheet/pivot_table.rb', line 188 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 << '"' << (data.size <= 1 ? ' 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| subtotal = !no_subtotals_on_headers.include?(cell_value) sorttype = sort_on_headers[cell_value] str << pivot_field_for(cell_value, subtotal, sorttype) 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 str << '<i/>' end str << '</rowItems>' end if columns.empty? if data.size > 1 str << '<colFields count="1"><field x="-2"/></colFields>' str << "<colItems count=\"#{data.size}\">" str << '<i><x/></i>' (data.size - 1).times do |i| str << "<i i=\"#{i + 1}\"><x v=\"#{i + 1}\"/></i>" end str << '</colItems>' else str << '<colItems count="1"><i/></colItems>' end 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| # The correct name prefix in ["Sum","Average", etc...] str << "<dataField name='#{datum_value[:subtotal] || ''} of #{datum_value[:ref]}' fld='#{header_index_of(datum_value[:ref])}' baseField='0' baseItem='0'" str << " numFmtId='#{datum_value[:num_fmt]}'" if datum_value[:num_fmt] str << " subtotal='#{datum_value[:subtotal]}' " if datum_value[:subtotal] str << "/>" end str << '</dataFields>' end # custom pivot table style unless style_info.empty? str << '<pivotTableStyleInfo' style_info.each do |k, v| str << ' ' << k.to_s << '="' << v.to_s << '"' end str << ' />' end str << '</pivotTableDefinition>' end |