Excel удаляет формулу и отчеты Calc. Ошибка:508

Я генерирую xlsx файлы, используя рубиновый Axlsx gem. СУММА и основные математические операции в формулах работают хорошо. Теперь у меня проблемы с формулой приведенной стоимости, например, =(PV($N$31; L$6; 0; K29)*(-1)). Как написано в заголовке, Excel удаляет формулу и отчеты Calc. Err:508. Если ячейка с формулой отредактирована (добавить знак плюс) или открыть ее в мастере функций, она "восстанавливается" Calc и начинает работать.

Я распаковал xslx и открыл лист в текстовом редакторе, и вот как лист сериализуется

<c r="A30" s="19" t="inlineStr"> <is> <t>Discounted Cash Flows</t> </is> </c> <c r="B30" s="46" t="str"> <f>(PV($N$30; B$6; 0; B26)*(-1))</f> </c> <c r="C30" s="46" t="str"> <f>(PV($N$30; C$6; 0; C26)*(-1))</f> </c> -- or other place <c r="B23" s="46" t="str"> <f>+PV($N$22; L6; 0; K20*-1; 1)</f> </c> </c>

И вот как это выглядит, когда Calc восстанавливает файл:

<c r="B30" s="15" t="n"> <f aca="false">+(PV($N$30, B$6, 0, B26)*(-1))</f> <v>550111.403508772</v> </c>

Это пример кода

require 'axlsx'

p = Axlsx::Package.new
wb = p.workbook

percent = wb.styles.add_style(:format_code => "0.00%", :border => Axlsx::STYLE_THIN_BORDER)
money = wb.styles.add_style(:format_code => '$0,000', :border => Axlsx::STYLE_THIN_BORDER)
status = wb.styles.add_style(:border => Axlsx::STYLE_THIN_BORDER)

wb.add_worksheet(:name => "Conditional Cell Is") do |sheet|
sheet.add_row ["Percent", "per", "Money", "Present Value"]
sheet.add_row ["0.03", "10", 150000, "=(PV($A$#{sheet.rows.count + 1}; B$#{sheet.rows.count + 1}; 0; C#{sheet.rows.count + 1})*-1)"], :style => [percent, nil, money, money]

sheet.add_row ["0.03", "10", 150000, "=PV(A3; B3; 0; C3)*-1"], :style => [nil, nil, nil, nil]

sheet.add_row ["0.03", "10", 150000, "=(PV(A#{sheet.rows.count + 1}; B#{sheet.rows.count + 1}; 0; C#{sheet.rows.count + 1})*-1)"], :style => [percent, nil, money, money]

sheet.add_row ["0.03", "10", 150000, "=(PV($A$#{sheet.rows.count + 1}; B$#{sheet.rows.count + 1}; 0; C#{sheet.rows.count + 1})*-1)"], :style => [nil, nil, nil, nil]
end

puts "Write to file ... "
p.serialize("pv_example.xlsx")

0 ответов

Другие вопросы по тегам