Как использовать Axlsx: NumFmt? - PullRequest
0 голосов
/ 03 мая 2019

Как использовать класс Alxsx: NumFmt?

Мне нужно использовать этот класс для форматирования валютных значений (положительных и отрицательных значений)

Я нашел некоторую документацию для этого класса здесь - https://www.rubydoc.info/github/randym/axlsx/Axlsx/NumFmt

Но нет доступных примеров кода.Пожалуйста, помогите мне, как использовать этот класс.

Текущий код:

currency_format_code = '$#,##0_;[Red]($#,##0_)' 
@default_style = wb.styles.add_style(:format_code => currency_format_code, 
  :sz => 10, :font_name => "Arial", 
  :alignment => {:horizontal => :right})
@italics_style = wb.styles.add_style(:format_code => currency_format_code, 
  :sz => 10, :font_name => "Arial Narrow", :i => true, 
  :alignment => {:horizontal => :right})

row_style = [nil, nil, nil, @default_left_style] + ([@default_style] * 25)

sheet.add_row[nil, nil, nil, day1, day2, day3, 
              day4, day5, day6, day7, day8, day9, 
              day10, day11, day12, day13, day14, 
              day15, day16, day17, day18, day19, 
              day20, day21, day22, day23, day24, 
              day25], :style => row_style

1 Ответ

1 голос
/ 06 мая 2019

Я не уверен, что вы можете сделать это более производительным, чем то, что у вас уже есть. Эта проблема заключается в том, что стиль применяется к каждой ячейке в строке отдельно array_to_cells

Выдержка:

def array_to_cells(values, options={})
  DataTypeValidator.validate :array_to_cells, Array, values
  types, style, formula_values = options.delete(:types), options.delete(:style), options.delete(:formula_values)
  values.each_with_index do |value, index|
    options[:style] = style.is_a?(Array) ? style[index] : style if style
    options[:type] = types.is_a?(Array) ? types[index] : types if types
    options[:formula_value] = formula_values[index] if formula_values.is_a?(Array)

    self[index] = Cell.new(self, value, options)
  end
end

Так что, как вы можете видеть, он проходит по всем 28 ячейкам в строке и ищет стиль, который должен быть применен для каждой из них, а затем создает новый Cell с этим стилем. Отсюда, вероятно, и происходит деградация.

...