htot_conv 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,69 +1,69 @@
1
- # frozen_string_literal: true
2
-
3
- require 'axlsx'
4
-
5
- require 'htot_conv/generator/base'
6
-
7
- module HTOTConv
8
- module Generator
9
- class XlsxType1 < XlsxBase
10
- def self.option_help
11
- {
12
- :outline_rows => {
13
- :default => false,
14
- :pat => FalseClass,
15
- :desc => "group rows (default: no)",
16
- },
17
- }
18
- end
19
-
20
- def output_to_worksheet(ws)
21
- max_value_length = @data.max_value_length
22
-
23
- ws.add_row([@data.key_header[0]].concat(
24
- HTOTConv::Util.pad_array(@data.value_header, max_value_length)),
25
- :style => Axlsx::STYLE_THIN_BORDER)
26
-
27
- @data.item.each do |item|
28
- ws.add_row([item.key].concat(
29
- HTOTConv::Util.pad_array(item.value, max_value_length)),
30
- :style => Axlsx::STYLE_THIN_BORDER)
31
- end
32
-
33
- if @option[:outline_rows]
34
- max_level = @data.max_level
35
- outline_begin = Array.new(max_level, nil)
36
- dummy_end_item = HTOTConv::Outline::Item.new(nil, 1, nil)
37
- @data.item.concat([dummy_end_item]).each_with_index do |item, item_index|
38
- (item.level..max_level).each do |level|
39
- if outline_begin[level - 1]
40
- if outline_begin[level - 1] < item_index - 1
41
- ws.outline_level_rows((outline_begin[level - 1] + 1) + 1, (item_index - 1) + 1, level, false)
42
- end
43
- outline_begin[level - 1] = nil
44
- end
45
- end
46
- outline_begin[item.level - 1] = item_index
47
- end
48
-
49
- # PR randym/axlsx#440 has been added to master branch
50
- # https://github.com/randym/axlsx/commit/c80c8b9d9be5542471d66afcc2ce4ddd80cac1f7
51
- # but latest release on rubygems does not contain this.
52
- # So apply monkey patch to ws.sheet_pr.
53
- if defined? ws.sheet_pr.outline_pr
54
- ws.sheet_pr.outline_pr.summary_below = false
55
- else
56
- class << ws.sheet_pr # monkey patch
57
- def to_xml_string(str="".dup)
58
- tmp_str = "".dup
59
- super(tmp_str)
60
- str << tmp_str.sub('<pageSetUpPr', '<outlinePr summaryBelow="0" /><pageSetUpPr')
61
- end
62
- end
63
- end
64
- end
65
- end
66
- end
67
- end
68
- end
69
-
1
+ # frozen_string_literal: true
2
+
3
+ require 'axlsx'
4
+
5
+ require 'htot_conv/generator/base'
6
+
7
+ module HTOTConv
8
+ module Generator
9
+ class XlsxType1 < XlsxBase
10
+ def self.option_help
11
+ {
12
+ :outline_rows => {
13
+ :default => false,
14
+ :pat => FalseClass,
15
+ :desc => "group rows (default: no)",
16
+ },
17
+ }
18
+ end
19
+
20
+ def output_to_worksheet(ws)
21
+ max_value_length = @data.max_value_length
22
+
23
+ ws.add_row([@data.key_header[0]].concat(
24
+ HTOTConv::Util.pad_array(@data.value_header, max_value_length)),
25
+ :style => Axlsx::STYLE_THIN_BORDER)
26
+
27
+ @data.item.each do |item|
28
+ ws.add_row([item.key].concat(
29
+ HTOTConv::Util.pad_array(item.value, max_value_length)),
30
+ :style => Axlsx::STYLE_THIN_BORDER)
31
+ end
32
+
33
+ if @option[:outline_rows]
34
+ max_level = @data.max_level
35
+ outline_begin = Array.new(max_level, nil)
36
+ dummy_end_item = HTOTConv::Outline::Item.new(nil, 1, nil)
37
+ @data.item.concat([dummy_end_item]).each_with_index do |item, item_index|
38
+ (item.level..max_level).each do |level|
39
+ if outline_begin[level - 1]
40
+ if outline_begin[level - 1] < item_index - 1
41
+ ws.outline_level_rows((outline_begin[level - 1] + 1) + 1, (item_index - 1) + 1, level, false)
42
+ end
43
+ outline_begin[level - 1] = nil
44
+ end
45
+ end
46
+ outline_begin[item.level - 1] = item_index
47
+ end
48
+
49
+ # PR randym/axlsx#440 has been added to master branch
50
+ # https://github.com/randym/axlsx/commit/c80c8b9d9be5542471d66afcc2ce4ddd80cac1f7
51
+ # but latest release on rubygems does not contain this.
52
+ # So apply monkey patch to ws.sheet_pr.
53
+ if defined? ws.sheet_pr.outline_pr
54
+ ws.sheet_pr.outline_pr.summary_below = false
55
+ else
56
+ class << ws.sheet_pr # monkey patch
57
+ def to_xml_string(str="".dup)
58
+ tmp_str = "".dup
59
+ super(tmp_str)
60
+ str << tmp_str.sub('<pageSetUpPr', '<outlinePr summaryBelow="0" /><pageSetUpPr')
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+
@@ -1,104 +1,104 @@
1
- # frozen_string_literal: true
2
- require 'axlsx'
3
-
4
- require 'htot_conv/generator/base'
5
-
6
- module HTOTConv
7
- module Generator
8
- class XlsxType2 < XlsxBase
9
- def self.option_help
10
- {
11
- :integrate_cells => {
12
- :default => nil,
13
- :pat => [:colspan, :rowspan],
14
- :desc => "integrate key cells (specify 'colspan' or 'rowspan')",
15
- },
16
- :outline_rows => {
17
- :default => false,
18
- :pat => FalseClass,
19
- :desc => "group rows (default: no)",
20
- },
21
- }
22
- end
23
-
24
- def output_to_worksheet(ws)
25
- max_level = @data.max_level
26
- max_value_length = @data.max_value_length
27
-
28
- ws.add_row(((1..max_level).map {|l| @data.key_header[l - 1] || nil }).concat(
29
- HTOTConv::Util.pad_array(@data.value_header, max_value_length)),
30
- :style => Axlsx::STYLE_THIN_BORDER)
31
-
32
- @data.item.each_with_index do |item, item_index|
33
- key_cell = Array.new(max_level, nil)
34
- key_cell[item.level - 1] = item.key
35
- value_cell = HTOTConv::Util.pad_array(item.value, max_value_length)
36
-
37
- ws.add_row(key_cell.concat(value_cell),
38
- :style => Axlsx::STYLE_THIN_BORDER)
39
-
40
- (1..max_level).each do |level|
41
- edges = []
42
- edges << :left if (level <= item.level)
43
- edges << :right if ((level < item.level) || (level == max_level))
44
- edges << :top if ((level >= item.level) || (item_index == 0))
45
- edges << :bottom if ((level > item.level) || (item_index == @data.item.length - 1))
46
- ws.rows.last.cells[level - 1].style = ws.styles.add_style(
47
- :border => { :style => :thin, :color => "00", :edges => edges })
48
- end
49
- end
50
-
51
- if @option[:outline_rows]
52
- outline_begin = Array.new(max_level, nil)
53
- dummy_end_item = HTOTConv::Outline::Item.new(nil, 1, nil)
54
- @data.item.concat([dummy_end_item]).each_with_index do |item, item_index|
55
- (item.level..max_level).each do |level|
56
- if outline_begin[level - 1]
57
- if outline_begin[level - 1] < item_index - 1
58
- ws.outline_level_rows((outline_begin[level - 1] + 1) + 1, (item_index - 1) + 1, level, false)
59
- end
60
- outline_begin[level - 1] = nil
61
- end
62
- end
63
- outline_begin[item.level - 1] = item_index
64
- end
65
-
66
- # PR randym/axlsx#440 has been added to master branch
67
- # https://github.com/randym/axlsx/commit/c80c8b9d9be5542471d66afcc2ce4ddd80cac1f7
68
- # but latest release on rubygems does not contain this.
69
- # So apply monkey patch to ws.sheet_pr.
70
- if defined? ws.sheet_pr.outline_pr
71
- ws.sheet_pr.outline_pr.summary_below = false
72
- else
73
- class << ws.sheet_pr # monkey patch
74
- def to_xml_string(str="".dup)
75
- tmp_str = "".dup
76
- super(tmp_str)
77
- str << tmp_str.sub('<pageSetUpPr', '<outlinePr summaryBelow="0" /><pageSetUpPr')
78
- end
79
- end
80
- end
81
- end
82
-
83
- case @option[:integrate_cells]
84
- when :colspan
85
- @data.item.each_with_index do |item, item_index|
86
- if item.level < max_level
87
- ws.merge_cells(ws.rows[item_index + 1].cells[((item.level - 1)..(max_level - 1))])
88
- end
89
- end
90
- when :rowspan
91
- @data.item.each_with_index do |item, item_index|
92
- cells = [ws.rows[item_index + 1].cells[item.level - 1]]
93
- ((item_index + 1)..(@data.item.length - 1)).each do |i|
94
- break if @data.item[i].level <= item.level
95
- cells << ws.rows[i + 1].cells[item.level - 1]
96
- end
97
-
98
- ws.merge_cells(cells) if cells.length > 1
99
- end
100
- end
101
- end
102
- end
103
- end
104
- end
1
+ # frozen_string_literal: true
2
+ require 'axlsx'
3
+
4
+ require 'htot_conv/generator/base'
5
+
6
+ module HTOTConv
7
+ module Generator
8
+ class XlsxType2 < XlsxBase
9
+ def self.option_help
10
+ {
11
+ :integrate_cells => {
12
+ :default => nil,
13
+ :pat => [:colspan, :rowspan],
14
+ :desc => "integrate key cells (specify 'colspan' or 'rowspan')",
15
+ },
16
+ :outline_rows => {
17
+ :default => false,
18
+ :pat => FalseClass,
19
+ :desc => "group rows (default: no)",
20
+ },
21
+ }
22
+ end
23
+
24
+ def output_to_worksheet(ws)
25
+ max_level = @data.max_level
26
+ max_value_length = @data.max_value_length
27
+
28
+ ws.add_row(((1..max_level).map {|l| @data.key_header[l - 1] || nil }).concat(
29
+ HTOTConv::Util.pad_array(@data.value_header, max_value_length)),
30
+ :style => Axlsx::STYLE_THIN_BORDER)
31
+
32
+ @data.item.each_with_index do |item, item_index|
33
+ key_cell = Array.new(max_level, nil)
34
+ key_cell[item.level - 1] = item.key
35
+ value_cell = HTOTConv::Util.pad_array(item.value, max_value_length)
36
+
37
+ ws.add_row(key_cell.concat(value_cell),
38
+ :style => Axlsx::STYLE_THIN_BORDER)
39
+
40
+ (1..max_level).each do |level|
41
+ edges = []
42
+ edges << :left if (level <= item.level)
43
+ edges << :right if ((level < item.level) || (level == max_level))
44
+ edges << :top if ((level >= item.level) || (item_index == 0))
45
+ edges << :bottom if ((level > item.level) || (item_index == @data.item.length - 1))
46
+ ws.rows.last.cells[level - 1].style = ws.styles.add_style(
47
+ :border => { :style => :thin, :color => "00", :edges => edges })
48
+ end
49
+ end
50
+
51
+ if @option[:outline_rows]
52
+ outline_begin = Array.new(max_level, nil)
53
+ dummy_end_item = HTOTConv::Outline::Item.new(nil, 1, nil)
54
+ @data.item.concat([dummy_end_item]).each_with_index do |item, item_index|
55
+ (item.level..max_level).each do |level|
56
+ if outline_begin[level - 1]
57
+ if outline_begin[level - 1] < item_index - 1
58
+ ws.outline_level_rows((outline_begin[level - 1] + 1) + 1, (item_index - 1) + 1, level, false)
59
+ end
60
+ outline_begin[level - 1] = nil
61
+ end
62
+ end
63
+ outline_begin[item.level - 1] = item_index
64
+ end
65
+
66
+ # PR randym/axlsx#440 has been added to master branch
67
+ # https://github.com/randym/axlsx/commit/c80c8b9d9be5542471d66afcc2ce4ddd80cac1f7
68
+ # but latest release on rubygems does not contain this.
69
+ # So apply monkey patch to ws.sheet_pr.
70
+ if defined? ws.sheet_pr.outline_pr
71
+ ws.sheet_pr.outline_pr.summary_below = false
72
+ else
73
+ class << ws.sheet_pr # monkey patch
74
+ def to_xml_string(str="".dup)
75
+ tmp_str = "".dup
76
+ super(tmp_str)
77
+ str << tmp_str.sub('<pageSetUpPr', '<outlinePr summaryBelow="0" /><pageSetUpPr')
78
+ end
79
+ end
80
+ end
81
+ end
82
+
83
+ case @option[:integrate_cells]
84
+ when :colspan
85
+ @data.item.each_with_index do |item, item_index|
86
+ if item.level < max_level
87
+ ws.merge_cells(ws.rows[item_index + 1].cells[((item.level - 1)..(max_level - 1))])
88
+ end
89
+ end
90
+ when :rowspan
91
+ @data.item.each_with_index do |item, item_index|
92
+ cells = [ws.rows[item_index + 1].cells[item.level - 1]]
93
+ ((item_index + 1)..(@data.item.length - 1)).each do |i|
94
+ break if @data.item[i].level <= item.level
95
+ cells << ws.rows[i + 1].cells[item.level - 1]
96
+ end
97
+
98
+ ws.merge_cells(cells) if cells.length > 1
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -1,85 +1,85 @@
1
- # frozen_string_literal: true
2
- require 'axlsx'
3
-
4
- require 'htot_conv/generator/base'
5
-
6
- module HTOTConv
7
- module Generator
8
- class XlsxType3 < XlsxBase
9
- def self.option_help
10
- {
11
- :integrate_cells => {
12
- :default => nil,
13
- :pat => [:colspan, :rowspan, :both],
14
- :desc => "integrate key cells (specify 'colspan', 'rowspan' or 'both')",
15
- },
16
- }
17
- end
18
-
19
- def output_to_worksheet(ws)
20
- max_level = @data.max_level
21
- max_value_length = @data.max_value_length
22
-
23
- ws.add_row([
24
- @data.key_header[0],
25
- *(HTOTConv::Util.pad_array([@data.value_header[0]], max_level)),
26
- *(HTOTConv::Util.pad_array(
27
- (@data.value_header.length <= 1)? [] : @data.value_header.last(@data.value_header.length - 1),
28
- [max_value_length - 1, 0].max)),
29
- ], :style => Axlsx::STYLE_THIN_BORDER)
30
- 1.upto(max_level) do |col_idx|
31
- edges = [:top, :bottom]
32
- edges << :left if (col_idx <= 1)
33
- edges << :right if (col_idx >= max_level)
34
- ws.rows.last.cells[col_idx].style = ws.styles.add_style(
35
- :border => { :style => :thin, :color => "00", :edges => edges })
36
- end
37
-
38
- @data.item.each_with_index do |item, item_index|
39
- key_value_cell = Array.new(max_level + 1, nil)
40
- key_value_cell[item.level - 1] = item.key
41
- key_value_cell[item.level ] = item.value[0]
42
- rest_value_cell = HTOTConv::Util.pad_array(
43
- (item.value.length <= 1)? [] : item.value.last(item.value.length - 1),
44
- [max_value_length - 1, 0].max)
45
-
46
- ws.add_row(key_value_cell.concat(rest_value_cell),
47
- :style => Axlsx::STYLE_THIN_BORDER)
48
-
49
- 0.upto(max_level) do |col_idx|
50
- edges = []
51
-
52
- edges << :left if (col_idx <= item.level)
53
- edges << :right if ((col_idx < item.level) || (col_idx >= max_level))
54
- edges << :top if ((col_idx > (item.level - 2)) || (item_index == 0))
55
- edges << :bottom if ((col_idx > (item.level - 1)) || (item_index == @data.item.length - 1))
56
- ws.rows.last.cells[col_idx].style = ws.styles.add_style(
57
- :border => { :style => :thin, :color => "00", :edges => edges })
58
- end
59
- end
60
-
61
- if [:colspan, :both].include?(@option[:integrate_cells])
62
- if max_level > 1
63
- ws.merge_cells(ws.rows[0].cells[1..(max_level)])
64
- end
65
- @data.item.each_with_index do |item, item_index|
66
- if item.level < max_level
67
- ws.merge_cells(ws.rows[item_index + 1].cells[(item.level..max_level)])
68
- end
69
- end
70
- end
71
- if [:rowspan, :both].include?(@option[:integrate_cells])
72
- @data.item.each_with_index do |item, item_index|
73
- cells = [ws.rows[item_index + 1].cells[item.level - 1]]
74
- ((item_index + 1)..(@data.item.length - 1)).each do |i|
75
- break if @data.item[i].level <= item.level
76
- cells << ws.rows[i + 1].cells[item.level - 1]
77
- end
78
-
79
- ws.merge_cells(cells) if cells.length > 1
80
- end
81
- end
82
- end
83
- end
84
- end
85
- end
1
+ # frozen_string_literal: true
2
+ require 'axlsx'
3
+
4
+ require 'htot_conv/generator/base'
5
+
6
+ module HTOTConv
7
+ module Generator
8
+ class XlsxType3 < XlsxBase
9
+ def self.option_help
10
+ {
11
+ :integrate_cells => {
12
+ :default => nil,
13
+ :pat => [:colspan, :rowspan, :both],
14
+ :desc => "integrate key cells (specify 'colspan', 'rowspan' or 'both')",
15
+ },
16
+ }
17
+ end
18
+
19
+ def output_to_worksheet(ws)
20
+ max_level = @data.max_level
21
+ max_value_length = @data.max_value_length
22
+
23
+ ws.add_row([
24
+ @data.key_header[0],
25
+ *(HTOTConv::Util.pad_array([@data.value_header[0]], max_level)),
26
+ *(HTOTConv::Util.pad_array(
27
+ (@data.value_header.length <= 1)? [] : @data.value_header.last(@data.value_header.length - 1),
28
+ [max_value_length - 1, 0].max)),
29
+ ], :style => Axlsx::STYLE_THIN_BORDER)
30
+ 1.upto(max_level) do |col_idx|
31
+ edges = [:top, :bottom]
32
+ edges << :left if (col_idx <= 1)
33
+ edges << :right if (col_idx >= max_level)
34
+ ws.rows.last.cells[col_idx].style = ws.styles.add_style(
35
+ :border => { :style => :thin, :color => "00", :edges => edges })
36
+ end
37
+
38
+ @data.item.each_with_index do |item, item_index|
39
+ key_value_cell = Array.new(max_level + 1, nil)
40
+ key_value_cell[item.level - 1] = item.key
41
+ key_value_cell[item.level ] = item.value[0]
42
+ rest_value_cell = HTOTConv::Util.pad_array(
43
+ (item.value.length <= 1)? [] : item.value.last(item.value.length - 1),
44
+ [max_value_length - 1, 0].max)
45
+
46
+ ws.add_row(key_value_cell.concat(rest_value_cell),
47
+ :style => Axlsx::STYLE_THIN_BORDER)
48
+
49
+ 0.upto(max_level) do |col_idx|
50
+ edges = []
51
+
52
+ edges << :left if (col_idx <= item.level)
53
+ edges << :right if ((col_idx < item.level) || (col_idx >= max_level))
54
+ edges << :top if ((col_idx > (item.level - 2)) || (item_index == 0))
55
+ edges << :bottom if ((col_idx > (item.level - 1)) || (item_index == @data.item.length - 1))
56
+ ws.rows.last.cells[col_idx].style = ws.styles.add_style(
57
+ :border => { :style => :thin, :color => "00", :edges => edges })
58
+ end
59
+ end
60
+
61
+ if [:colspan, :both].include?(@option[:integrate_cells])
62
+ if max_level > 1
63
+ ws.merge_cells(ws.rows[0].cells[1..(max_level)])
64
+ end
65
+ @data.item.each_with_index do |item, item_index|
66
+ if item.level < max_level
67
+ ws.merge_cells(ws.rows[item_index + 1].cells[(item.level..max_level)])
68
+ end
69
+ end
70
+ end
71
+ if [:rowspan, :both].include?(@option[:integrate_cells])
72
+ @data.item.each_with_index do |item, item_index|
73
+ cells = [ws.rows[item_index + 1].cells[item.level - 1]]
74
+ ((item_index + 1)..(@data.item.length - 1)).each do |i|
75
+ break if @data.item[i].level <= item.level
76
+ cells << ws.rows[i + 1].cells[item.level - 1]
77
+ end
78
+
79
+ ws.merge_cells(cells) if cells.length > 1
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end