def cell_type_from_value(v)
      if v.is_a?(Date)
        :date
      elsif v.is_a?(Time)
        :time
      elsif v.is_a?(TrueClass) || v.is_a?(FalseClass)
        :boolean
      elsif v.to_s =~ Axlsx::NUMERIC_REGEX
        :integer
      elsif v.to_s =~ Axlsx::FLOAT_REGEX
        :float
      elsif v.to_s =~ Axlsx::ISO_8601_REGEX
        :iso_8601
      elsif v.is_a? RichText
        :richtext
      else
        :string
      end
    end
def cell_type_from_value(v)
      if v.is_a?(Date)
        :date
      elsif v.is_a?(Time)
        :time
      elsif v.is_a?(TrueClass) || v.is_a?(FalseClass)
        :boolean
      elsif v.to_s =~ Axlsx::NUMERIC_REGEX
        :integer
      elsif v.to_s =~ Axlsx::FLOAT_REGEX
        :float
      elsif v.to_s =~ Axlsx::ISO_8601_REGEX
        :iso_8601
      elsif v.is_a? RichText
        :richtext
      else
        :string
      end
    end
Determines the cell type based on the cell value.
 @note This is only used when a cell is created but no :type option is specified, the following rules apply:
   1. If the value is an instance of Date, the type is set to :date
   2. If the value is an instance of Time, the type is set to :time
   3. If the value is an instance of TrueClass or FalseClass, the type is set to :boolean
   4. :float and :integer types are determined by regular expression matching.
   5. Anything that does not meet either of the above is determined to be :string.
 @return [Symbol] The determined type