[英]Rails axlsx gem - Formula not escaping
有没有一种方法可以在呈现电子表格时忽略执行公式?
目前,即使我给出:formula => :false
或:type=> :string
, sheet.add_row("=10+10")
也会计算为20
唯一的方法是提供单引号,但这不是一个好方法。
我在Stop Excel中从自动将某些文本值转换为日期中找到了答案
require 'axlsx'
Axlsx::Package.new do |p|
p.workbook.add_worksheet(:name => 'DATA') do |sheet|
sheet.add_row(['="10+10"', 'Maybe this is the best solution'])
sheet.add_row(["'10+10", 'Hack with single quote'])
end
p.serialize('test.xlsx')
end
结果是:
我查看了有问题的gem的源代码,其中有以下代码:
def is_formula?
@type == :string && @value.to_s.start_with?('=')
end
这意味着任何类型为'='的字符串都将被视为公式。 唯一可接受的类型是日期,字符串,整数,浮点型等。其他任何代替:type =>:string的类型都不会接受。
或者,我必须在gem中打开类cell_serializer.rb
并以自定义方式重新实现该方法,以摆脱cell.is_formula? 校验。
def string_type_serialization(cell, str='')
if cell.is_formula?
formula_serialization cell, str
elsif !cell.ssti.nil?
value_serialization 's', cell.ssti.to_s, str
else
inline_string_serialization cell, str
end
end
重新实现的方法:
def string_type_serialization(cell, str='')
if !cell.ssti.nil?
value_serialization 's', cell.ssti.to_s, str
else
inline_string_serialization cell, str
end
end
我意识到这是一种骇客的方式,但是会影响系统范围的代码。 如果将来我需要任何复杂的东西,我总是可以在一个中心位置进行更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.