如何使用Axlsx以每列不同的样式将数组写入Excel

我希望能够使用Axlsx gem写出不同风格的Excel电子表格。

我一次写一个整行的哈希数组,因此,我似乎无法根据需要以不同的格式。

我不知道该怎么说,“对于AD列使用默认样式,但是对于列E和F,使用水平中心alignment”。

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=>"Link\n", :importance=>"Low Priority", :score=>"5", :overall_score=>"4.5", :match=>"Yes", :access=>"Anywhere", :title=>"Full Title"} {:vendor_name=>"vendor2", :link=>"Link2\n", :importance=>"Medium Priority", :score=>"7", :overall_score=>"8.5", :match=>"Yes", :access=>"Typical", :title=>"Full Title"} ... ... 

在这种情况下,是正确的方法来写所有的数据与所需的主要格式standard_text ,然后应用自定义格式后,所有的数据已被写入?

我认为这可能在循环中工作,只有当条件为真时写出行,但它总是返回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' 

在我的样式被读取后,我创build一个工作表:

 wb.add_worksheet(name: 'Example') do |sheet| 

工作表创build后,我可以通过调用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