19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/htot_conv/generator/xlsx_type3.rb', line 19
def output_to_worksheet(ws)
max_level = @data.max_level
max_value_length = @data.max_value_length
ws.add_row([
@data.[0],
*(HTOTConv::Util.pad_array([@data.[0]], max_level)),
*(HTOTConv::Util.pad_array(
(@data..length <= 1)? [] : @data..last(@data..length - 1),
[max_value_length - 1, 0].max)),
], :style => Axlsx::STYLE_THIN_BORDER)
1.upto(max_level) do |col_idx|
edges = [:top, :bottom]
edges << :left if (col_idx <= 1)
edges << :right if (col_idx >= max_level)
ws.rows.last.cells[col_idx].style = ws.styles.add_style(
:border => { :style => :thin, :color => "00", :edges => edges })
end
@data.item.each_with_index do |item, item_index|
key_value_cell = Array.new(max_level + 1, nil)
key_value_cell[item.level - 1] = item.key
key_value_cell[item.level ] = item.value[0]
rest_value_cell = HTOTConv::Util.pad_array(
(item.value.length <= 1)? [] : item.value.last(item.value.length - 1),
[max_value_length - 1, 0].max)
ws.add_row(key_value_cell.concat(rest_value_cell),
:style => Axlsx::STYLE_THIN_BORDER)
0.upto(max_level) do |col_idx|
edges = []
edges << :left if (col_idx <= item.level)
edges << :right if ((col_idx < item.level) || (col_idx >= max_level))
edges << :top if ((col_idx > (item.level - 2)) || (item_index == 0))
edges << :bottom if ((col_idx > (item.level - 1)) || (item_index == @data.item.length - 1))
ws.rows.last.cells[col_idx].style = ws.styles.add_style(
:border => { :style => :thin, :color => "00", :edges => edges })
end
end
if [:colspan, :both].include?(@option[:integrate_cells])
if max_level > 1
ws.merge_cells(ws.rows[0].cells[1..(max_level)])
end
@data.item.each_with_index do |item, item_index|
if item.level < max_level
ws.merge_cells(ws.rows[item_index + 1].cells[(item.level..max_level)])
end
end
end
if [:rowspan, :both].include?(@option[:integrate_cells])
@data.item.each_with_index do |item, item_index|
cells = [ws.rows[item_index + 1].cells[item.level - 1]]
((item_index + 1)..(@data.item.length - 1)).each do |i|
break if @data.item[i].level <= item.level
cells << ws.rows[i + 1].cells[item.level - 1]
end
ws.merge_cells(cells) if cells.length > 1
end
end
end
|