我正在使用axlsx
gem创建电子表格。我想在所有电子表格列上设置固定宽度,我需要调用函数
def column_widths(*widths)
widths.each_with_index do |value, index|
next if value == nil
Axlsx::validate_unsigned_numeric(value) unless value == nil
find_or_create_column_info(index).width = value
end
end
在Axlsx::Worksheet
中定义,具有任意数量的列宽。例如。 `sheet.column_width(20,20,...,20)。我的方法调用看起来像
sheet.column_widths [20]*headers.length
导致错误
ActionView::Template::Error (Invalid Data [20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20] for Invalid column width. must be [Fixnum, Integer, Float].
如何为未知数量的列动态创建正确的方法调用?
答案 0 :(得分:1)
您的问题是方法column_widths
的定义如下:
def column_widths(*widths)
# some stuff
参数*
中出现的splatter运算符*widths
表示您可以从1到N(其中N> 1)参数。您正在尝试将此方法与Integer数组一起使用,而应将每个Integer作为单个参数传递,例如:
sheet.column_widths(20, 20, 20, 20, #etc...
但这不是最好的方法。使用这些参数的一种更好的方法是使用splatter运算符:
sheet.column_widths(*[20]*headers.length)
#^ This is the splatter operator
一个非常明确的splatter运算符实用程序示例(在我的IRB控制台中,Ruby 1.9.3p489):
ann, marc, john = *['Ann', 'Marc', 'John']
# => ["Ann", "Marc", "John"]
ann
# => "Ann"
关于splatter运算符的一些内容:http://4loc.wordpress.com/2009/01/16/the-splat-operator-in-ruby/