概要
RubyXLでCellをchange_contentsする際に、日付を入れても日付として認識されず、フォーマットが適用されない問題にぶち当たった。
cell.change_contents(Time.zone.now) # これだとダメ
原因
Time.zone.nowだとダメな理由はものすごいシンプルで、change_contentsの挙動がDateかDateTimeだと変わっているからだった。
lib/rubyXL/cell.rb
# File 'lib/rubyXL/cell.rb', line 231
def change_contents(data, formula=nil)
validate_worksheet
@datatype='str'
if data.is_a?(Date) || data.is_a?(DateTime)
data = @workbook.date_to_num(data)
end
if (data.is_a?Integer) || (data.is_a?Float)
@datatype = ''
end
@value=data
@formula=formula
end
ref) Method: RubyXL::Cell#change_contents
解決方法
Date.currentを使えば解決!
cell.change_contents(Time.zone.now) # これだとダメ
cell.change_contents(Date.current) # これだと大丈夫