Создать формулу массива, используя axlsx - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь сгенерировать электронную таблицу Excel xlsx, используя Ruby и гем AXLSX. Я новичок в этом драгоценном камне, и примеры не показывают больше, чем просто «базовые» формулы.

При добавлении строки с использованием этого кода выходные данные в столбцах формулы неверны.

require 'axlsx'

numRows = 10

p = Axlsx::Package.new
wb = p.workbook
wb.add_worksheet(:name => "Formula") do |ws|
  date_style = wb.styles.add_style :sz => 9, :font_name => 'Calibri' #, :format_code => 'mm/dd/yyyy'

  # add rows with random values, the current day, and 3 empty cells to be populated with formulas
  ws.add_row ["Data 1", "Data 2", "Data 3", 'Today', 'Reference', 'Sum', 'Array Formula 1', 'Array Formula 2']
  numRows.times { |i| ws.add_row [rand(100), rand(200), rand(50), '=TODAY()', '', '', '', ''] }

  (1..10).each { |i|
    ws.rows[i].cells[3].type = :string
    ws.rows[i].cells[4].value = "=A#{i+1}"
    ws.rows[i].cells[5].value = "=SUM(A#{i+1}:C#{i+1})"
    ws.rows[i].cells[6].value = "=INDEX($A$2:$A$#{numRows+1},MATCH(1,(B#{i+1}=$A$2:$A$#{numRows+1})*($C$2=$A$2:$A$#{numRows+1}),0))"
    ws.rows[i].cells[7].value = "{=INDEX($A$2:$A$#{numRows+1},MATCH(1,(B#{i+1}=$A$2:$A$#{numRows+1})*($C$2=$A$2:$A$#{numRows+1}),0))}"
  }

  ws.cols[3].each { |c| c.style = date_style }
end

p.serialize 'test.xlsx'

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

Есть ли примеры, как это сделать?

...