我希望能够使用Axlsx gem编写一个Excel电子表格,将不同的样式应用于不同的列。
我一次写一整行的哈希数组,因此,我似乎无法根据需要对列进行不同的格式设置。
我不知道如何说,"对于列A-D,使用默认样式,但是对于列E和F,使用水平中心对齐"。
require 'axlsx'
p = Axlsx::Package.new
wb = p.workbook
# Default Style for all cells
standard_text = wb.styles.add_style( :alignment => {:vertical=>:center, :wrap_text=>true} )
# Custom styling to be applied to cells in rows E and F only
custom_text = wb.styles.add_style( :alignment => {:horizontal=>:center} )
assessment_technology_hashes.each do |rows|
sheet.add_row(rows.values, :height => 35, :style => standard_text)
end
以下是使用add_row
:编写的rows
的哈希数组的结构
{:vendor_name=>"vendor", :link=>"Linkn", :importance=>"Low Priority", :score=>"5", :overall_score=>"4.5", :match=>"Yes", :access=>"Anywhere", :title=>"Full Title"}
{:vendor_name=>"vendor2", :link=>"Link2n", :importance=>"Medium Priority", :score=>"7", :overall_score=>"8.5", :match=>"Yes", :access=>"Typical", :title=>"Full Title"}
...
...
在这种情况下,用所需的主格式standard_text
写入所有数据,然后在写入所有数据后应用自定义格式,这是正确的方法吗?
我认为这可能在循环中起作用,只在条件为true时写出行,但它总是返回false:
sheet.add_row(rows.values, :height => 35, :style => custom_text) if rows.key?(:overall_score) || rows.key?(:match)
有人能告诉我做这件事的正确方向吗?
以下是我的操作方法。
首先,我生成这样的样式:
p = Axlsx::Package.new
wb = p.workbook
# styles
style_1 = wb.styles.add_style bg_color: '3492ff', font_name: 'Calibri'
style_2 = wb.styles.add_style bg_color: 'ff8800', font_name: 'Arial'
阅读我的风格后,我创建了一个工作表:
wb.add_worksheet(name: 'Example') do |sheet|
创建工作表后,我可以通过调用add_row
添加数据。作为最后一个论点,我传递一个样式数组。示例:
sheet.add_row ['Column 1', 'Column2'], style: [style_1, style_2]
通过这种方式,我可以为单个列的单元格设置样式。如果您不想应用style_2,只需键入[style_1, nil]
即可。
这是连接代码
p = Axlsx::Package.new
wb = p.workbook
# styles
style_1 = wb.styles.add_style bg_color: '3492ff', font_name: 'Calibri'
style_2 = wb.styles.add_style bg_color: 'ff8800', font_name: 'Arial'
# worksheet
wb.add_worksheet(name: 'Example') do |sheet|
sheet.add_row ['Column 1', 'Column2'], style: [style_1, style_2]
end
end