From b1600deadaafdb396c5cc7ca9d448e8adab8ac11 Mon Sep 17 00:00:00 2001 From: Randy Morgan Date: Fri, 14 Dec 2012 13:15:16 +0900 Subject: Added formula_values options and specs for sheet format pr. This lets cache formula values and specify the default row height so that iOS and Max OSX previews render properly --- lib/axlsx/workbook/worksheet/cell.rb | 10 ++++++++-- lib/axlsx/workbook/worksheet/row.rb | 11 ++++++++++- lib/axlsx/workbook/worksheet/worksheet.rb | 1 - 3 files changed, 18 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/axlsx/workbook/worksheet/cell.rb b/lib/axlsx/workbook/worksheet/cell.rb index cfcb6118..67b11633 100644 --- a/lib/axlsx/workbook/worksheet/cell.rb +++ b/lib/axlsx/workbook/worksheet/cell.rb @@ -28,11 +28,12 @@ module Axlsx # @option options [Symbol] vertAlign must be one of :baseline, :subscript, :superscript # @option options [Integer] sz # @option options [String] color an 8 letter rgb specification + # @option options [Number] formula_value The value to cache for a formula cell. # @option options [Symbol] scheme must be one of :none, major, :minor def initialize(row, value="", options={}) self.row=row @value = @font_name = @charset = @family = @b = @i = @strike = @outline = @shadow = nil - @condense = @u = @vertAlign = @sz = @color = @scheme = @extend = @ssti = nil + @formula_value = @condense = @u = @vertAlign = @sz = @color = @scheme = @extend = @ssti = nil @styles = row.worksheet.workbook.styles @row.cells << self parse_options options @@ -41,6 +42,10 @@ module Axlsx @value = cast_value(value) end + # 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. + attr_accessor :formula_value + # 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. @@ -326,8 +331,9 @@ module Axlsx when :string #parse formula - if @value.start_with?('=') + if is_formula? str << 't="str">' << @value.to_s.sub('=', '') << '' + str << '' << @formula_value.to_s << '' if @formula_value else #parse shared if @ssti diff --git a/lib/axlsx/workbook/worksheet/row.rb b/lib/axlsx/workbook/worksheet/row.rb index 1b64b412..43c85b59 100644 --- a/lib/axlsx/workbook/worksheet/row.rb +++ b/lib/axlsx/workbook/worksheet/row.rb @@ -147,15 +147,24 @@ module Axlsx def array_to_cells(values, options={}) values = values DataTypeValidator.validate 'Row.array_to_cells', Array, values - types, style = options.delete(:types), options.delete(:style) + types, style, formula_values = options.delete(:types), options.delete(:style), options.delete(:formula_values) values.each_with_index do |value, index| + + #WTF IS THIS PAP? cell_style = style.is_a?(Array) ? style[index] : style options[:style] = cell_style if cell_style + cell_type = types.is_a?(Array)? types[index] : types options[:type] = cell_type if cell_type + + formula_value = formula_values[index] if formula_values.is_a?(Array) + options[:formula_value] = formula_value if formula_value + Cell.new(self, value, options) + options.delete(:style) options.delete(:type) + options.delete(:formula_value) end end end diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb index af2b2dfd..62d4e557 100644 --- a/lib/axlsx/workbook/worksheet/worksheet.rb +++ b/lib/axlsx/workbook/worksheet/worksheet.rb @@ -620,7 +620,6 @@ module Axlsx raise ArgumentError, (ERR_DUPLICATE_SHEET_NAME % name) if sheet_names.include?(name) end - def serializable_parts [sheet_pr, dimension, sheet_view, sheet_format_pr, column_info, sheet_data, sheet_calc_pr, @sheet_protection, protected_ranges, -- cgit v1.2.3