class Spreadsheet::Format
Formatting data
Attributes
Text rotation
Public Class Methods
# File lib/spreadsheet/format.rb, line 90 def initialize opts={} @font = Font.new client("Arial", 'UTF-8'), :family => :swiss @number_format = client 'GENERAL', 'UTF-8' @rotation = 0 @pattern = 0 @bottom_color = :black @top_color = :black @left_color = :black @right_color = :black @diagonal_color = :black @pattern_fg_color = :border @pattern_bg_color = :pattern_bg @regexes = { :date => Regexp.new(client("[YMD]", 'UTF-8')), :date_or_time => Regexp.new(client("[hmsYMD]", 'UTF-8')), :datetime => Regexp.new(client("([YMD].*[HS])|([HS].*[YMD])", 'UTF-8')), :time => Regexp.new(client("[hms]", 'UTF-8')), :number => Regexp.new(client("([\#]|0+)", 'UTF-8')), :locale => Regexp.new(client(/\A\[\$\-\d+\]/.to_s, 'UTF-8')), } # Temp code to prevent merged formats in non-merged cells. @used_merge = 0 update_format(opts) yield self if block_given? end
Public Instance Methods
Combined method for both horizontal and vertical alignment. Sets the first valid value (e.g. Format#align = :justify only sets the horizontal alignment. Use one of the aliases prefixed with :v if you need to disambiguate.)
This is essentially a backward-compatibility method and may be removed at some point in the future.
# File lib/spreadsheet/format.rb, line 134 def align= location self.horizontal_align = location rescue ArgumentError self.vertical_align = location rescue ArgumentError end
Returns an Array containing the line styles of the four borders: bottom, top, right, left
# File lib/spreadsheet/format.rb, line 142 def border [bottom, top, right, left] end
Set same line style on all four borders at once (left, right, top, bottom)
# File lib/spreadsheet/format.rb, line 147 def border=(style) [:bottom=, :top=, :right=, :left=].each do |writer| send writer, style end end
Returns an Array containing the colors of the four borders: bottom, top, right, left
# File lib/spreadsheet/format.rb, line 153 def border_color [@bottom_color,@top_color,@right_color,@left_color] end
Set all four border colors to color (left, right, top, bottom)
# File lib/spreadsheet/format.rb, line 158 def border_color=(color) [:bottom_color=, :top_color=, :right_color=, :left_color=].each do |writer| send writer, color end end
Color attributes
# File lib/spreadsheet/format.rb, line 51 colors :bottom_color, :top_color, :left_color, :right_color, :pattern_fg_color, :pattern_bg_color, :diagonal_color
Backward compatibility method. May disappear at some point in the future.
# File lib/spreadsheet/format.rb, line 179 def center_across! self.horizontal_align = :merge end
You can set the following boolean attributes:
- cross_down
-
Draws a Line from the top-left to the bottom-right corner of a cell.
- cross_up
-
Draws a Line from the bottom-left to the top-right corner of a cell.
- hidden
-
The cell is hidden.
- locked
-
The cell is locked.
- merge_range
-
The cell is in a merged range.
- shrink
-
Shrink the contents to fit the cell.
- text_justlast
-
Force the last line of a cell to be justified. This probably makes sense if #horizontal_align = :justify
- left
-
Apply a border style to the left of the cell.
- right
-
Apply a border style to the right of the cell.
- top
-
Apply a border style at the top of the cell.
- bottom
-
Apply a border style at the bottom of the cell.
- rotation_stacked
-
Characters in the cell are stacked on top of each other. Excel will ignore other rotation values if this is set.
# File lib/spreadsheet/format.rb, line 30 boolean :cross_down, :cross_up, :hidden, :locked, :merge_range, :shrink, :text_justlast, :text_wrap, :rotation_stacked
Is the cell formatted as a Date?
# File lib/spreadsheet/format.rb, line 185 def date? !number? && matches_format?(:date) end
Is the cell formatted as a Date or Time?
# File lib/spreadsheet/format.rb, line 190 def date_or_time? !number? && matches_format?(:date_or_time) end
Is the cell formatted as a DateTime?
# File lib/spreadsheet/format.rb, line 195 def datetime? !number? && matches_format?(:datetime) end
Horizontal alignment Valid values: :default, :left, :center, :right, :fill, :justify, :merge,
:distributed
Default: :default
# File lib/spreadsheet/format.rb, line 73 enum :horizontal_align, :default, :left, :center, :right, :fill, :justify, :merge, :distributed, :center => :centre, :merge => [ :center_across, :centre_across ], :distributed => :equal_space
Indentation level
# File lib/spreadsheet/format.rb, line 65 enum :indent_level, 0, Integer
Does the cell match a particular preset format?
# File lib/spreadsheet/format.rb, line 210 def matches_format?(name) # Excel number formats may optionally include a locale identifier like this: # [$-409] format = @number_format.to_s.sub(@regexes[:locale], '') !!@regexes[name].match(format) end
Is the cell formatted as a number?
# File lib/spreadsheet/format.rb, line 205 def number? matches_format?(:number) end
Set the Text rotation Valid values: Integers from -90 to 90, or :stacked (sets rotation_stacked to true)
# File lib/spreadsheet/format.rb, line 166 def rotation=(rot) if rot.to_s.downcase == 'stacked' @rotation_stacked = true @rotation = 0 elsif rot.kind_of?(Integer) @rotation_stacked = false @rotation = rot % 360 else raise TypeError, "rotation value must be an Integer or the String 'stacked'" end end
Is the cell formatted as a Time?
# File lib/spreadsheet/format.rb, line 200 def time? !number? && matches_format?(:time) end
# File lib/spreadsheet/format.rb, line 118 def update_format(opts = {}) opts.each do |attribute, value| writer = "#{attribute}=" @font.respond_to?(writer) ? @font.send(writer,value) : self.send(writer, value) end self end