Class: Axlsx::Cell

Inherits:
Object
  • Object
show all
Includes:
OptionsParser
Defined in:
lib/axlsx/workbook/worksheet/cell.rb

Overview

Note:

The recommended way to generate cells is via Worksheet#add_row

A cell in a worksheet. Cell stores inforamation requried to serialize a single worksheet cell to xml. You must provde the Row that the cell belongs to and the cells value. The data type will automatically be determed if you do not specify the :type option. The default style will be applied if you do not supply the :style option. Changing the cell's type will recast the value to the type specified. Altering the cell's value via the property accessor will also automatically cast the provided value to the cell's type.

See Also:

Constant Summary collapse

INLINE_STYLES =

An array of available inline styes. TODO change this to a hash where each key defines attr name and validator (and any info the validator requires) then move it out to a module so we can re-use in in other classes. needs to define bla=(v) and bla methods on the class that hook into a set_attr method that kicks the suplied validator and updates the instance_variable for the key

['value', 'type', 'font_name', 'charset',
'family', 'b', 'i', 'strike','outline',
'shadow', 'condense', 'extend', 'u',
'vertAlign', 'sz', 'color', 'scheme']

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from OptionsParser

#parse_options

Constructor Details

#initialize(row, value = "", options = {}) ⇒ Cell

Returns a new instance of Cell.

Parameters:

  • row (Row)

    The row this cell belongs to.

  • value (Any) (defaults to: "")

    The value associated with this cell.

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • type (Symbol)

    The intended data type for this cell. If not specified the data type will be determined internally based on the vlue provided.

  • style (Integer)

    The index of the cellXfs item to be applied to this cell. If not specified, the default style (0) will be applied.

  • font_name (String)
  • charset (Integer)
  • family (String)
  • b (Boolean)
  • i (Boolean)
  • strike (Boolean)
  • outline (Boolean)
  • shadow (Boolean)
  • condense (Boolean)
  • extend (Boolean)
  • u (Boolean)
  • vertAlign (Symbol)

    must be one of :baseline, :subscript, :superscript

  • sz (Integer)
  • color (String)

    an 8 letter rgb specification

  • formula_value (Number)

    The value to cache for a formula cell.

  • scheme (Symbol)

    must be one of :none, major, :minor



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 33

def initialize(row, value="", options={})
  self.row=row
  @value = nil
  #@value = @font_name = @charset = @family = @b = @i = @strike = @outline = @shadow = nil
  #@formula_value = @condense = @u = @vertAlign = @sz = @color = @scheme = @extend = @ssti = nil
  @styles = row.worksheet.workbook.styles
  @row.cells << self
  parse_options options
  @style ||= 0
  @type ||= cell_type_from_value(value)
  @value = cast_value(value)
end

Instance Attribute Details

#bBoolean

The inline bold property for the cell

Returns:

  • (Boolean)


161
162
163
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 161

def b
  @b
end

#charsetString

The inline charset property for the cell As far as I can tell, this is pretty much ignored. However, based on the spec it should be one of the following: 0  ANSI_CHARSET 1 DEFAULT_CHARSET 2 SYMBOL_CHARSET 77 MAC_CHARSET 128 SHIFTJIS_CHARSET 129  HANGUL_CHARSET 130  JOHAB_CHARSET 134  GB2312_CHARSET 136  CHINESEBIG5_CHARSET 161  GREEK_CHARSET 162  TURKISH_CHARSET 163  VIETNAMESE_CHARSET 177  HEBREW_CHARSET 178  ARABIC_CHARSET 186  BALTIC_CHARSET 204  RUSSIAN_CHARSET 222  THAI_CHARSET 238  EASTEUROPE_CHARSET 255  OEM_CHARSET

Returns:

  • (String)


142
143
144
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 142

def charset
  @charset
end

#colorColor

The inline color property for the cell

Returns:



215
216
217
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 215

def color
  @color
end

#condenseBoolean

The inline condense property for the cell

Returns:

  • (Boolean)


191
192
193
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 191

def condense
  @condense
end

#extendBoolean

The inline extend property for the cell

Returns:

  • (Boolean)


197
198
199
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 197

def extend
  @extend
end

#familyInteger

The inline family property for the cell 1 Roman 2 Swiss 3 Modern 4 Script 5 Decorative

Returns:

  • (Integer)


153
154
155
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 153

def family
  @family
end

#font_nameString

The inline font_name property for the cell

Returns:

  • (String)


116
117
118
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 116

def font_name
  @font_name
end

#formula_valueObject

this is the cached value for formula cells. If you want the values to render in iOS/Mac OSX preview you need to set this.



48
49
50
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 48

def formula_value
  @formula_value
end

#iBoolean

The inline italic property for the cell

Returns:

  • (Boolean)


167
168
169
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 167

def i
  @i
end

#outlineBoolean

The inline outline property for the cell

Returns:

  • (Boolean)


179
180
181
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 179

def outline
  @outline
end

#rowRow

The row this cell belongs to.

Returns:



68
69
70
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 68

def row
  @row
end

#schemeSymbol

The inline scheme property for the cell this must be one of [:none, major, minor]

Returns:

  • (Symbol)


241
242
243
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 241

def scheme
  @scheme
end

#shadowBoolean

The inline shadow property for the cell

Returns:

  • (Boolean)


185
186
187
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 185

def shadow
  @shadow
end

#sstiInteger

The Shared Strings Table index for this cell

Returns:

  • (Integer)


250
251
252
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 250

def ssti
  @ssti
end

#strikeBoolean

The inline strike property for the cell

Returns:

  • (Boolean)


173
174
175
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 173

def strike
  @strike
end

#styleInteger

The index of the cellXfs item to be applied to this cell.

Returns:

  • (Integer)

See Also:



64
65
66
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 64

def style
  @style
end

#szInteter

The inline sz property for the cell

Returns:

  • (Inteter)


224
225
226
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 224

def sz
  @sz
end

#typeSymbol

Note:

If the value provided cannot be cast into the type specified, type is changed to :string and the following logic is applied. :string to :integer or :float, type conversions always return 0 or 0.0 :string, :integer, or :float to :time conversions always return the original value as a string and set the cells type to :string. No support is currently implemented for parsing time strings.

The cell's data type. Currently only six types are supported, :date, :time, :float, :integer, :string and :boolean. Changing the type for a cell will recast the value into that type. If no type option is specified in the constructor, the type is automatically determed.

Returns:

  • (Symbol)

    The type of data this cell's value is cast to.

Raises:

  • (ArgumentExeption)

    Cell.type must be one of [:date, time, :float, :integer, :string, :boolean]

See Also:

  • #cell_type_from_value


81
82
83
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 81

def type
  @type
end

#uBoolean, String

Note:

true is for backwards compatability and is reassigned to :single

The inline underline property for the cell. It must be one of :none, :single, :double, :singleAccounting, :doubleAccounting, true

Returns:

  • (Boolean)
  • (String)


206
207
208
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 206

def u
  @u
end

#valueString, ...

The value of this cell.

Returns:

  • (String, Integer, Float, Time, Boolean)

    casted value based on cell's type attribute.



92
93
94
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 92

def value
  @value
end

#vertAlignSymbol

The inline vertical alignment property for the cell this must be one of [:baseline, :subscript, :superscript]

Returns:

  • (Symbol)


231
232
233
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 231

def vertAlign
  @vertAlign
end

Instance Method Details

#autowidthObject

This is still not perfect...

  • scaling is not linear as font sizes increst
  • different fonts have different mdw and char widths


313
314
315
316
317
318
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 313

def autowidth
  return if is_formula? || value == nil
  mdw = 1.78 #This is the widest width of 0..9 in arial@10px)
  font_scale = (font_size/10.0).to_f
  ((value.to_s.count(Worksheet.thin_chars) * mdw + 5) / mdw * 256) / 256.0 * font_scale
end

#indexInteger

Returns The index of the cell in the containing row.

Returns:

  • (Integer)

    The index of the cell in the containing row.



253
254
255
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 253

def index
  @row.cells.index(self)
end

#is_formula?Boolean

Returns:

  • (Boolean)


306
307
308
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 306

def is_formula?
  @type == :string && @value.to_s.start_with?('=')
end

#is_text_run?Boolean

Indicates that the cell has one or more of the custom cell styles applied.

Returns:

  • (Boolean)


101
102
103
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 101

def is_text_run?
  @is_text_run ||= false
end

#merge(target) ⇒ Object

Merges all the cells in a range created between this cell and the cell or string name for a cell provided

Parameters:

  • target (Cell, String)

    The last cell, or str ref for the cell in the merge range

See Also:

  • Axlsx::Cell.worksheetworksheet.merge_cells


288
289
290
291
292
293
294
295
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 288

def merge(target)
  range_end = if target.is_a?(String)
                target
              elsif(target.is_a?(Cell))
                target.r
              end
  self.row.worksheet.merge_cells "#{self.r}:#{range_end}" unless range_end.nil?
end

#plain_string?Boolean

Indicates if the cell is good for shared string table

Returns:

  • (Boolean)


106
107
108
109
110
111
112
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 106

def plain_string?
  @type == :string &&         # String typed
    !is_text_run? &&          # No inline styles
    !@value.nil? &&           # Not nil
    !@value.empty? &&         # Not empty
    !@value.start_with?('=')  # Not a formula
end

#posArray

Returns of x/y coordinates in the cheet for this cell.

Returns:

  • (Array)

    of x/y coordinates in the cheet for this cell.



281
282
283
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 281

def pos
  [index, row.index]
end

#rString

Returns The alpha(column)numeric(row) reference for this sell.

Examples:

Relative Cell Reference

ws.rows.first.cells.first.r #=> "A1"

Returns:

  • (String)

    The alpha(column)numeric(row) reference for this sell.



260
261
262
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 260

def r
  Axlsx::cell_r index, @row.index
end

#r_absString

Returns The absolute alpha(column)numeric(row) reference for this sell.

Examples:

Absolute Cell Reference

ws.rows.first.cells.first.r #=> "$A$1"

Returns:

  • (String)

    The absolute alpha(column)numeric(row) reference for this sell.



267
268
269
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 267

def r_abs
  "$#{r.match(%r{([A-Z]+)([0-9]+)})[1,2].join('$')}"
end

#reference(absolute = true) ⇒ String

returns the absolute or relative string style reference for this cell. returned.

Parameters:

  • absolute (Boolean) (defaults to: true)

    -when false a relative reference will be

Returns:

  • (String)


325
326
327
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 325

def reference(absolute=true)
  absolute ? r_abs : r
end

#to_xml_string(r_index, c_index, str = '') ⇒ String

Serializes the cell

Parameters:

  • r_index (Integer)

    The row index for the cell

  • c_index (Integer)

    The cell index in the row.

  • str (String) (defaults to: '')

    The string index the cell content will be appended to. Defaults to empty string.

Returns:

  • (String)

    xml text for the cell



302
303
304
# File 'lib/axlsx/workbook/worksheet/cell.rb', line 302

def to_xml_string(r_index, c_index, str = '')
  CellSerializer.to_xml_string r_index, c_index, self, str
end