class Xlsxtream::Columns
Public Class Methods
new(column_options_array)
click to toggle source
Pass an Array of column options Hashes. Symbol Hash keys and associated values are as follows:
width_chars
-
Approximate column with in characters, calculated per MSDN docs as if using a default 11 point Calibri font for a 96 DPI target. Specify as an integer.
width_pixels
-
Exact with of column in pixels. Specify as a Float. Overrides
width_chars
if that is also provided.
# File lib/xlsxtream/columns.rb, line 15 def initialize(column_options_array) @columns = column_options_array end
Public Instance Methods
to_xml()
click to toggle source
# File lib/xlsxtream/columns.rb, line 19 def to_xml xml = String.new('<cols>') @columns.each_with_index do |column, index| width_chars = column[ :width_chars ] width_pixels = column[ :width_pixels ] if width_chars.nil? && width_pixels.nil? xml << %Q{<col min="#{index + 1}" max="#{index + 1}"/>} else # https://msdn.microsoft.com/en-us/library/office/documentformat.openxml.spreadsheet.column.aspx # # Truncate( # [{Number of Characters} * {Maximum Digit Width} + {5 pixel padding}] # /{Maximum Digit Width}*256 # )/256 # # "Using the Calibri font as an example, the maximum digit width of # 11 point font size is 7 pixels (at 96 dpi)" # # By observation, though, I note that a different spreadsheet-wide # font size selected via the Workbook's ":font => { :size => ... }" # options Hash entry results in Excel, at least, scaling the given # widths in proportion with the requested font size change. We do # not, apparently, need to do that ourselves and run the calculation # based on the reference 11 point -> 7 pixel figure. # width_pixels ||= ((((width_chars * 7.0) + 5) / 7) * 256).truncate() / 256.0 xml << %Q{<col min="#{index + 1}" max="#{index + 1}" width="#{width_pixels}" customWidth="1"/>} end end xml << '</cols>' end