class HTOTConv::Generator::XlsxType5
Public Class Methods
option_help()
click to toggle source
Calls superclass method
HTOTConv::Generator::XlsxBase::option_help
# File lib/htot_conv/generator/xlsx_type5.rb, line 8 def self.option_help super.merge({ :integrate_cells => { :default => nil, :pat => [:colspan], :desc => "integrate key cells (specify 'colspan')", }, }) end
Public Instance Methods
output_to_worksheet(ws)
click to toggle source
# File lib/htot_conv/generator/xlsx_type5.rb, line 18 def output_to_worksheet(ws) max_level = @data.max_level max_value_length = @data.max_value_length row_index = 0 ((1..max_level).map {|l| @data.key_header[l - 1] || nil }).concat( HTOTConv::Util.pad_array(@data.value_header, max_value_length) ).each_with_index do |v, col_index| ws.add_cell(row_index, col_index, v) [:top, :bottom, :left, :right].each do |edge| ws[row_index][col_index].change_border(edge, "thin") end end row_index = row_index.succ @data.to_tree.descendants.each do |node| if node.leaf? item = node.item key_cell = Array.new(max_level, nil) key_cell[node.item.level - 1] = item.key node.ancestors.each do |ancestor| key_cell[ancestor.item.level - 1] = ancestor.item.key if ancestor.item end value_cell = HTOTConv::Util.pad_array(item.value, max_value_length) key_cell.concat(value_cell).each_with_index do |v, col_index| ws.add_cell(row_index, col_index, v) [:top, :bottom, :left, :right].each do |edge| ws[row_index][col_index].change_border(edge, "thin") end end (item.level..max_level).each do |level| edges = [] edges << :left unless (level == item.level) edges << :right unless (level == max_level) edges.each do |edge| ws[row_index][level - 1].change_border(edge, nil) end end if [:colspan].include?(@option[:integrate_cells]) if item.level < max_level ws.merge_cells(row_index, item.level - 1, row_index, max_level - 1) end end row_index = row_index.succ end end ws.auto_filter ||= RubyXL::AutoFilter.new ws.auto_filter.ref = RubyXL::Reference.new(0, row_index - 1, 0, max_level + max_value_length -1) end