htot_conv 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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