AXLSX合并样式中的单元格

我正在使用ruby gem axlsx并想知道是否有办法在样式中设置合并列? 今天我这样做:

sheet.merge_cells "A1:E1" sheet.add_row [I18n.t('foo.some_label').upcase], style: [title] sheet.merge_cells "B2:E2" ... 

我想避免手动递增细胞(B2:E2 … B5:E5),有办法做到这一点吗?

是的尝试一下(*免责声明我实际上没有测试这些方法,但我过去使用过类似的function)

 def merge_last_row(sheet,options ={}) last_row = sheet.rows.last.index + 1 first_col,last_col = options[:columns] if first_col && last_col sheet.merge_cells "#{first_col}#{last_row}:#{last_col}#{last_row}" else sheet.merge_cells sheet.rows.last end sheet.rows.last.style = style if options[:style] end 

所以做你想做的事情

 merge_last_row sheet, columns:["A","E"] sheet.add_row [I18n.t('foo.some_label').upcase] merge_last_row sheet, columns:["B","E"], style:title 

如果最后一行包含AE中的数据,那么列可以保留为空,它将合并整行。 如果没有,你可以添加一个填充列的选项

 def fill_columns(sheet,column_count,options={}) row = options[:row_data] || [] (column_count - row.count).times do row << nil end sheet.add_row row end 

打电话给

 my_row = ["Hello","World"] fill_columns sheet, 5,row_data: my_row # this will add a row like["Hello","World",nil,nil,nil] # so that it will merge properly across the columns AE merge_last_row sheet 

如果要始终如一地使用这些函数,那么将这些函数修补到Worksheet可能更有意义,因此您不必传递工作sheet对象。

 module Axlsx class Worksheet def merge_last_row(options={}) last_row = rows.last.index + 1 first_col,last_col = options[:columns] if first_col && last_col merge_cells "#{first_col}#{last_row}:#{last_col}#{last_row}" else merge_cells rows.last end rows.last.style = style if options[:style] end def fill_columns(column_count,options={}) row_data = options[:row_data] || [] (column_count - row.count).times do row_data << nil end add_row row_data end end end 

呼叫

 sheet.merge_last_row columns:["A","E"] sheet.add_row [I18n.t('foo.some_label').upcase] sheet.merge_last_row columns:["B","E"], style:title