diff --git a/lib/roo/excelx/cell/number.rb b/lib/roo/excelx/cell/number.rb index 5cdec5eb..c071170b 100644 --- a/lib/roo/excelx/cell/number.rb +++ b/lib/roo/excelx/cell/number.rb @@ -28,14 +28,14 @@ def create_numeric(number) end end - def formatted_value - return @cell_value if Excelx::ERROR_VALUES.include?(@cell_value) + def formatted_value(format = @format, cell_value = @cell_value) + return cell_value if Excelx::ERROR_VALUES.include?(cell_value) - formatter = generate_formatter(@format) + formatter = generate_formatter(format) if formatter.is_a? Proc - formatter.call(@cell_value) + formatter.call(cell_value) else - Kernel.format(formatter, @cell_value) + Kernel.format(formatter, cell_value) end end @@ -76,6 +76,11 @@ def generate_formatter(format) formatted_number = generate_formatter($2).call(number) "#{$1}#{formatted_number}" end + when /^([^\\]+)\\?\s*\[\$([A-Z]+)\]$/ # 0.00\\ [$EUR] + proc do |number| + formatted_number = formatted_value($1, number) + "#{formatted_number} #{$2}" + end else raise "Unknown format: #{format.inspect}" end diff --git a/test/excelx/cell/test_number.rb b/test/excelx/cell/test_number.rb index 58c9ff7f..43c538dd 100644 --- a/test/excelx/cell/test_number.rb +++ b/test/excelx/cell/test_number.rb @@ -81,7 +81,8 @@ def test_formats ['#,##0.00;[Red](#,##0.00)', '1,042.00'], ['##0.0E+0', '1.0E+03'], ["_-* #,##0.00\\ _€_-;\\-* #,##0.00\\ _€_-;_-* \"-\"??\\ _€_-;_-@_-", '1,042.00'], - ['@', '1042'] + ['@', '1042'], + ['0.00\\ [$EUR]', '1042.00 EUR'] ].each do |style_format, result| cell = Roo::Excelx::Cell::Number.new '1042', nil, [style_format], nil, nil, nil assert_equal result, cell.formatted_value, "Style=#{style_format}"