Я пытаюсь сгенерировать электронную таблицу 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'
Формулы массива не работают. Как показано в коде, я пробовал с и без скобок. Я не уверен, как указать, что содержимое ячейки является массивом формул.
Есть ли примеры, как это сделать?