axlsx 1.0.16 → 1.1.0

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.
Files changed (173) hide show
  1. data/.yardopts +1 -0
  2. data/CHANGELOG.md +18 -3
  3. data/README.md +189 -55
  4. data/examples/example.csv +1000 -0
  5. data/examples/example.rb +264 -142
  6. data/examples/example.xlsx +0 -0
  7. data/examples/example_streamed.xlsx +0 -0
  8. data/examples/no-use_autowidth.xlsx +0 -0
  9. data/examples/shared_strings_example.xlsx +0 -0
  10. data/lib/axlsx/content_type/content_type.rb +13 -12
  11. data/lib/axlsx/content_type/default.rb +10 -6
  12. data/lib/axlsx/content_type/override.rb +13 -8
  13. data/lib/axlsx/doc_props/app.rb +38 -41
  14. data/lib/axlsx/doc_props/core.rb +13 -17
  15. data/lib/axlsx/drawing/axis.rb +39 -19
  16. data/lib/axlsx/drawing/bar_3D_chart.rb +34 -32
  17. data/lib/axlsx/drawing/bar_series.rb +14 -14
  18. data/lib/axlsx/drawing/cat_axis.rb +16 -14
  19. data/lib/axlsx/drawing/cat_axis_data.rb +17 -18
  20. data/lib/axlsx/drawing/chart.rb +40 -41
  21. data/lib/axlsx/drawing/drawing.rb +16 -12
  22. data/lib/axlsx/drawing/graphic_frame.rb +22 -21
  23. data/lib/axlsx/drawing/hyperlink.rb +13 -12
  24. data/lib/axlsx/drawing/line_3D_chart.rb +31 -28
  25. data/lib/axlsx/drawing/line_series.rb +12 -11
  26. data/lib/axlsx/drawing/marker.rb +11 -8
  27. data/lib/axlsx/drawing/named_axis_data.rb +36 -0
  28. data/lib/axlsx/drawing/one_cell_anchor.rb +18 -16
  29. data/lib/axlsx/drawing/pic.rb +26 -38
  30. data/lib/axlsx/drawing/picture_locking.rb +22 -18
  31. data/lib/axlsx/drawing/pie_3D_chart.rb +11 -8
  32. data/lib/axlsx/drawing/pie_series.rb +16 -12
  33. data/lib/axlsx/drawing/scaling.rb +11 -10
  34. data/lib/axlsx/drawing/scatter_chart.rb +69 -0
  35. data/lib/axlsx/drawing/scatter_series.rb +39 -0
  36. data/lib/axlsx/drawing/ser_axis.rb +11 -10
  37. data/lib/axlsx/drawing/series.rb +16 -15
  38. data/lib/axlsx/drawing/series_title.rb +15 -14
  39. data/lib/axlsx/drawing/title.rb +27 -26
  40. data/lib/axlsx/drawing/two_cell_anchor.rb +19 -20
  41. data/lib/axlsx/drawing/val_axis.rb +9 -7
  42. data/lib/axlsx/drawing/val_axis_data.rb +18 -17
  43. data/lib/axlsx/drawing/view_3D.rb +23 -20
  44. data/lib/axlsx/package.rb +116 -51
  45. data/lib/axlsx/rels/relationship.rb +12 -8
  46. data/lib/axlsx/rels/relationships.rb +8 -1
  47. data/lib/axlsx/stylesheet/#num_fmt.rb# +69 -0
  48. data/lib/axlsx/stylesheet/border.rb +28 -23
  49. data/lib/axlsx/stylesheet/border_pr.rb +17 -15
  50. data/lib/axlsx/stylesheet/cell_alignment.rb +24 -21
  51. data/lib/axlsx/stylesheet/cell_protection.rb +11 -7
  52. data/lib/axlsx/stylesheet/cell_style.rb +9 -5
  53. data/lib/axlsx/stylesheet/color.rb +21 -14
  54. data/lib/axlsx/stylesheet/fill.rb +8 -5
  55. data/lib/axlsx/stylesheet/font.rb +22 -14
  56. data/lib/axlsx/stylesheet/gradient_fill.rb +20 -17
  57. data/lib/axlsx/stylesheet/gradient_stop.rb +10 -6
  58. data/lib/axlsx/stylesheet/num_fmt.rb +13 -6
  59. data/lib/axlsx/stylesheet/pattern_fill.rb +26 -10
  60. data/lib/axlsx/stylesheet/styles.rb +53 -41
  61. data/lib/axlsx/stylesheet/table_style.rb +10 -4
  62. data/lib/axlsx/stylesheet/table_style_element.rb +11 -7
  63. data/lib/axlsx/stylesheet/table_styles.rb +12 -8
  64. data/lib/axlsx/stylesheet/xf.rb +30 -25
  65. data/lib/axlsx/util/cbf.rb +1 -0
  66. data/lib/axlsx/util/constants.rb +27 -14
  67. data/lib/axlsx/util/ms_off_crypto.rb +1 -1
  68. data/lib/axlsx/util/parser.rb +1 -0
  69. data/lib/axlsx/util/simple_typed_list.rb +20 -10
  70. data/lib/axlsx/util/storage.rb +1 -0
  71. data/lib/axlsx/util/validators.rb +23 -7
  72. data/lib/axlsx/version.rb +2 -1
  73. data/lib/axlsx/workbook/shared_strings_table.rb +69 -0
  74. data/lib/axlsx/workbook/shared_strings_table.rb~ +69 -0
  75. data/lib/axlsx/workbook/workbook.rb +81 -35
  76. data/lib/axlsx/workbook/worksheet/cell.rb +172 -117
  77. data/lib/axlsx/workbook/worksheet/col.rb +114 -0
  78. data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
  79. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +29 -0
  80. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -0
  81. data/lib/axlsx/workbook/worksheet/row.rb +53 -21
  82. data/lib/axlsx/workbook/worksheet/shared_strings_table.rb~ +0 -0
  83. data/lib/axlsx/workbook/worksheet/table.rb +96 -0
  84. data/lib/axlsx/workbook/worksheet/table.rb~ +97 -0
  85. data/lib/axlsx/workbook/worksheet/worksheet.rb +269 -121
  86. data/lib/axlsx.rb +41 -14
  87. data/lib/schema/dc.xsd +5 -5
  88. data/lib/schema/dcmitype.xsd +5 -3
  89. data/lib/schema/dcterms.xsd +15 -15
  90. data/lib/schema/opc-coreProperties.xsd +6 -2
  91. data/lib/schema/xml.xsd +7 -8
  92. data/test/#benchmark.txt# +7 -0
  93. data/test/#tc_helper.rb# +3 -0
  94. data/test/benchmark.rb +81 -0
  95. data/test/benchmark.rb~ +0 -0
  96. data/test/benchmark.txt +6 -0
  97. data/test/benchmark.txt~ +6 -0
  98. data/test/content_type/tc_content_type.rb +31 -31
  99. data/test/content_type/tc_default.rb +9 -22
  100. data/test/content_type/tc_override.rb +8 -21
  101. data/test/doc_props/tc_app.rb +2 -8
  102. data/test/doc_props/tc_core.rb +6 -7
  103. data/test/drawing/tc_axis.rb +7 -3
  104. data/test/drawing/tc_bar_3D_chart.rb +6 -7
  105. data/test/drawing/tc_bar_series.rb +4 -5
  106. data/test/drawing/tc_cat_axis.rb +2 -3
  107. data/test/drawing/tc_cat_axis_data.rb +2 -3
  108. data/test/drawing/tc_chart.rb +13 -14
  109. data/test/drawing/tc_drawing.rb +7 -8
  110. data/test/drawing/tc_graphic_frame.rb +3 -4
  111. data/test/drawing/tc_hyperlink.rb +2 -3
  112. data/test/drawing/tc_line_3d_chart.rb +5 -6
  113. data/test/drawing/tc_line_series.rb +3 -4
  114. data/test/drawing/tc_marker.rb +3 -4
  115. data/test/drawing/tc_one_cell_anchor.rb +6 -7
  116. data/test/drawing/tc_pic.rb +8 -9
  117. data/test/drawing/tc_picture_locking.rb +2 -3
  118. data/test/drawing/tc_pie_3D_chart.rb +5 -6
  119. data/test/drawing/tc_pie_series.rb +4 -5
  120. data/test/drawing/tc_scaling.rb +3 -4
  121. data/test/drawing/tc_scatter_chart.rb +43 -0
  122. data/test/drawing/tc_scatter_series.rb +20 -0
  123. data/test/drawing/tc_ser_axis.rb +2 -3
  124. data/test/drawing/tc_series.rb +4 -5
  125. data/test/drawing/tc_series_title.rb +4 -5
  126. data/test/drawing/tc_title.rb +4 -5
  127. data/test/drawing/tc_two_cell_anchor.rb +4 -5
  128. data/test/drawing/tc_val_axis.rb +2 -3
  129. data/test/drawing/tc_val_axis_data.rb +2 -3
  130. data/test/drawing/tc_view_3D.rb +6 -7
  131. data/test/example.csv +1000 -0
  132. data/test/example.xlsx +0 -0
  133. data/test/example_streamed.xlsx +0 -0
  134. data/test/profile.rb +33 -0
  135. data/test/rels/tc_relationship.rb +5 -6
  136. data/test/rels/tc_relationships.rb +4 -5
  137. data/test/stylesheet/tc_border.rb +3 -4
  138. data/test/stylesheet/tc_border_pr.rb +3 -4
  139. data/test/stylesheet/tc_cell_alignment.rb +10 -6
  140. data/test/stylesheet/tc_cell_protection.rb +2 -3
  141. data/test/stylesheet/tc_cell_style.rb +2 -3
  142. data/test/stylesheet/tc_color.rb +2 -3
  143. data/test/stylesheet/tc_fill.rb +1 -2
  144. data/test/stylesheet/tc_font.rb +12 -5
  145. data/test/stylesheet/tc_gradient_fill.rb +1 -2
  146. data/test/stylesheet/tc_gradient_stop.rb +1 -2
  147. data/test/stylesheet/tc_num_fmt.rb +1 -2
  148. data/test/stylesheet/tc_pattern_fill.rb +3 -4
  149. data/test/stylesheet/tc_styles.rb +16 -6
  150. data/test/stylesheet/tc_table_style.rb +2 -3
  151. data/test/stylesheet/tc_table_style_element.rb +2 -3
  152. data/test/stylesheet/tc_table_styles.rb +3 -4
  153. data/test/stylesheet/tc_xf.rb +16 -17
  154. data/test/tc_axlsx.rb +39 -0
  155. data/test/tc_axlsx.rb~ +0 -0
  156. data/test/tc_helper.rb +3 -0
  157. data/test/tc_helper.rb~ +3 -0
  158. data/test/tc_package.rb +43 -9
  159. data/test/util/tc_simple_typed_list.rb +8 -9
  160. data/test/util/tc_validators.rb +7 -8
  161. data/test/workbook/tc_shared_strings_table.rb +38 -0
  162. data/test/workbook/tc_workbook.rb +32 -6
  163. data/test/workbook/worksheet/table/tc_table.rb +71 -0
  164. data/test/workbook/worksheet/table/tc_table.rb~ +72 -0
  165. data/test/workbook/worksheet/tc_cell.rb +70 -13
  166. data/test/workbook/worksheet/tc_col.rb +59 -0
  167. data/test/workbook/worksheet/tc_col.rb~ +10 -0
  168. data/test/workbook/worksheet/tc_date_time_converter.rb +126 -0
  169. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  170. data/test/workbook/worksheet/tc_row.rb +54 -4
  171. data/test/workbook/worksheet/tc_worksheet.rb +191 -31
  172. metadata +162 -109
  173. data/test/drawing/tc_hyperlink.rb~ +0 -71
data/examples/example.rb CHANGED
@@ -1,196 +1,318 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/env ruby -w -s
2
2
  # -*- coding: utf-8 -*-
3
- require 'axlsx'
3
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
4
+ require 'axlsx'
4
5
 
5
- p = Axlsx::Package.new
6
- wb = p.workbook
6
+ p = Axlsx::Package.new
7
+ wb = p.workbook
7
8
 
8
9
  #A Simple Workbook
9
10
 
10
- wb.add_worksheet(:name => "Basic Worksheet") do |sheet|
11
- sheet.add_row ["First Column", "Second", "Third"]
12
- sheet.add_row [1, 2, 3]
13
- end
11
+ wb.add_worksheet(:name => "Basic Worksheet") do |sheet|
12
+ sheet.add_row ["First Column", "Second", "Third"]
13
+ sheet.add_row [1, 2, 3]
14
+ end
14
15
 
15
16
  #Using Custom Styles
16
17
 
17
- wb.styles do |s|
18
- black_cell = s.add_style :bg_color => "00", :fg_color => "FF", :sz => 14, :alignment => { :horizontal=> :center }
19
- blue_cell = s.add_style :bg_color => "0000FF", :fg_color => "FF", :sz => 20, :alignment => { :horizontal=> :center }
20
- wb.add_worksheet(:name => "Custom Styles") do |sheet|
21
- sheet.add_row ["Text Autowidth", "Second", "Third"], :style => [black_cell, blue_cell, black_cell]
22
- sheet.add_row [1, 2, 3], :style => Axlsx::STYLE_THIN_BORDER
23
- end
24
- end
18
+ wb.styles do |s|
19
+ black_cell = s.add_style :bg_color => "00", :fg_color => "FF", :sz => 14, :alignment => { :horizontal=> :center }
20
+ blue_cell = s.add_style :bg_color => "0000FF", :fg_color => "FF", :sz => 20, :alignment => { :horizontal=> :center }
21
+ wb.add_worksheet(:name => "Custom Styles") do |sheet|
22
+ sheet.add_row ["Text Autowidth", "Second", "Third"], :style => [black_cell, blue_cell, black_cell]
23
+ sheet.add_row [1, 2, 3], :style => Axlsx::STYLE_THIN_BORDER
24
+ end
25
+ end
26
+
27
+ #Using Custom Border Styles
28
+
29
+ wb.styles do |s|
30
+ red_border = s.add_style :border => {:style=>:thin, :color =>"FFFF0000"}
31
+ blue_border = s.add_style :border => {:style=>:thin, :color =>"FF0000FF"}
32
+
33
+ wb.add_worksheet(:name => "Custom Borders") do |sheet|
34
+ sheet.add_row ["wrap", "me", "Up in Red"], :style => red_border
35
+ sheet.add_row [1, 2, 3], :style => blue_border
36
+ end
37
+ end
38
+
25
39
 
26
40
  ##Using Custom Formatting and date1904
27
- require 'date'
28
- wb.styles do |s|
29
- date = s.add_style(:format_code => "yyyy-mm-dd", :border => Axlsx::STYLE_THIN_BORDER)
30
- padded = s.add_style(:format_code => "00#", :border => Axlsx::STYLE_THIN_BORDER)
31
- percent = s.add_style(:format_code => "0000%", :border => Axlsx::STYLE_THIN_BORDER)
32
- wb.date1904 = true # required for generation on mac
33
- wb.add_worksheet(:name => "Formatting Data") do |sheet|
34
- sheet.add_row ["Custom Formatted Date", "Percent Formatted Float", "Padded Numbers"], :style => Axlsx::STYLE_THIN_BORDER
35
- sheet.add_row [Date::strptime('2012-01-19','%Y-%m-%d'), 0.2, 32], :style => [date, percent, padded]
36
- end
37
- end
41
+ require 'date'
42
+ wb.styles do |s|
43
+ date = s.add_style(:format_code => "yyyy-mm-dd", :border => Axlsx::STYLE_THIN_BORDER)
44
+ padded = s.add_style(:format_code => "00#", :border => Axlsx::STYLE_THIN_BORDER)
45
+ percent = s.add_style(:format_code => "0000%", :border => Axlsx::STYLE_THIN_BORDER)
46
+ # wb.date1904 = true # Use the 1904 date system (Used by Excel for Mac < 2011)
47
+ wb.add_worksheet(:name => "Formatting Data") do |sheet|
48
+ sheet.add_row ["Custom Formatted Date", "Percent Formatted Float", "Padded Numbers"], :style => Axlsx::STYLE_THIN_BORDER
49
+ sheet.add_row [Date::strptime('2012-01-19','%Y-%m-%d'), 0.2, 32], :style => [date, percent, padded]
50
+ end
51
+ end
52
+
38
53
 
39
54
  ##Add an Image
40
55
 
41
- wb.add_worksheet(:name => "Images") do |sheet|
42
- img = File.expand_path('examples/image1.jpeg')
43
- sheet.add_image(:image_src => img, :noSelect => true, :noMove => true) do |image|
44
- image.width=720
45
- image.height=666
46
- image.start_at 2, 2
47
- end
48
- end
56
+ wb.add_worksheet(:name => "Images") do |sheet|
57
+ img = File.expand_path('../image1.jpeg', __FILE__)
58
+ sheet.add_image(:image_src => img, :noSelect => true, :noMove => true) do |image|
59
+ image.width=720
60
+ image.height=666
61
+ image.start_at 2, 2
62
+ end
63
+ end
49
64
 
50
65
  ##Add an Image with a hyperlink
51
66
 
52
- wb.add_worksheet(:name => "Image with Hyperlink") do |sheet|
53
- img = File.expand_path('examples/image1.jpeg')
54
- sheet.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
55
- image.width=720
56
- image.height=666
57
- image.hyperlink.tooltip = "Labeled Link"
58
- image.start_at 2, 2
59
- end
60
- end
67
+ wb.add_worksheet(:name => "Image with Hyperlink") do |sheet|
68
+ img = File.expand_path('../image1.jpeg', __FILE__)
69
+ sheet.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
70
+ image.width=720
71
+ image.height=666
72
+ image.hyperlink.tooltip = "Labeled Link"
73
+ image.start_at 2, 2
74
+ end
75
+ end
61
76
 
62
77
  ##Asian Language Support
63
78
 
64
- wb.add_worksheet(:name => "Unicode Support") do |sheet|
65
- sheet.add_row ["日本語"]
66
- sheet.add_row ["华语/華語"]
67
- sheet.add_row ["한국어/조선말"]
68
- end
79
+ wb.add_worksheet(:name => "日本語でのシート名") do |sheet|
80
+ sheet.add_row ["日本語"]
81
+ sheet.add_row ["华语/華語"]
82
+ sheet.add_row ["한국어/조선말"]
83
+ end
69
84
 
70
85
  ##Styling Columns
71
86
 
72
- wb.styles do |s|
73
- percent = s.add_style :num_fmt => 9
74
- wb.add_worksheet(:name => "Styling Columns") do |sheet|
75
- sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
76
- sheet.add_row [1, 2, 0.3, 4]
77
- sheet.add_row [1, 2, 0.2, 4]
78
- sheet.add_row [1, 2, 0.1, 4]
79
- sheet.col_style 2, percent, :row_offset => 1
80
- end
81
- end
87
+ wb.styles do |s|
88
+ percent = s.add_style :num_fmt => 9
89
+ wb.add_worksheet(:name => "Styling Columns") do |sheet|
90
+ sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
91
+ sheet.add_row [1, 2, 0.3, 4]
92
+ sheet.add_row [1, 2, 0.2, 4]
93
+ sheet.add_row [1, 2, 0.1, 4]
94
+ sheet.col_style 2, percent, :row_offset => 1
95
+ end
96
+ end
97
+
98
+ ##Hiding Columns
99
+
100
+ wb.styles do |s|
101
+ percent = s.add_style :num_fmt => 9
102
+ wb.add_worksheet(:name => "Hidden Column") do |sheet|
103
+ sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
104
+ sheet.add_row [1, 2, 0.3, 4]
105
+ sheet.add_row [1, 2, 0.2, 4]
106
+ sheet.add_row [1, 2, 0.1, 4]
107
+ sheet.col_style 2, percent, :row_offset => 1
108
+ sheet.column_info[1].hidden = true
109
+ end
110
+ end
82
111
 
83
112
  ##Styling Rows
84
113
 
85
- wb.styles do |s|
86
- head = s.add_style :bg_color => "00", :fg_color => "FF"
87
- percent = s.add_style :num_fmt => 9
88
- wb.add_worksheet(:name => "Styling Rows") do |sheet|
89
- sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
90
- sheet.add_row [1, 2, 0.3, 4]
91
- sheet.add_row [1, 2, 0.2, 4]
92
- sheet.add_row [1, 2, 0.1, 4]
93
- sheet.col_style 2, percent, :row_offset => 1
94
- sheet.row_style 0, head
95
- end
96
- end
114
+ wb.styles do |s|
115
+ head = s.add_style :bg_color => "00", :fg_color => "FF"
116
+ percent = s.add_style :num_fmt => 9
117
+ wb.add_worksheet(:name => "Styling Rows") do |sheet|
118
+ sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
119
+ sheet.add_row [1, 2, 0.3, 4]
120
+ sheet.add_row [1, 2, 0.2, 4]
121
+ sheet.add_row [1, 2, 0.1, 4]
122
+ sheet.col_style 2, percent, :row_offset => 1
123
+ sheet.row_style 0, head
124
+ end
125
+ end
97
126
 
98
127
  ##Styling Cell Overrides
99
128
 
100
- wb.add_worksheet(:name => "Cell Level Style Overrides") do |sheet|
101
- # cell level style overides when adding cells
102
- sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4'], :sz => 16
103
- sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
104
- # cell level style overrides via sheet range
105
- sheet["A1:D1"].each { |c| c.color = "FF0000"}
106
- sheet['A1:D2'].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
107
- end
129
+ wb.add_worksheet(:name => "Cell Level Style Overrides") do |sheet|
130
+ # cell level style overides when adding cells
131
+ sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4'], :sz => 16
132
+ sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
133
+ # cell level style overrides via sheet range
134
+ sheet["A1:D1"].each { |c| c.color = "FF0000"}
135
+ sheet['A1:D2'].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
136
+ end
108
137
 
109
138
  ##Using formula
110
139
 
111
- wb.add_worksheet(:name => "Using Formulas") do |sheet|
112
- sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
113
- sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
114
- end
140
+ wb.add_worksheet(:name => "Using Formulas") do |sheet|
141
+ sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
142
+ sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
143
+ end
144
+
145
+ ##Automatic cell types
146
+
147
+ wb.add_worksheet(:name => "Automatic cell types") do |sheet|
148
+ sheet.add_row ["Date", "Time", "String", "Boolean", "Float", "Integer"]
149
+ sheet.add_row [Date.today, Time.now, "value", true, 0.1, 1]
150
+ end
115
151
 
116
152
  ##Merging Cells.
117
153
 
118
- wb.add_worksheet(:name => 'Merging Cells') do |sheet|
119
- # cell level style overides when adding cells
120
- sheet.add_row ["col 1", "col 2", "col 3", "col 4"], :sz => 16
121
- sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
122
- sheet.add_row [2, 3, 4, "=SUM(A3:C3)"]
123
- sheet.add_row ["total", "", "", "=SUM(D2:D3)"]
124
- sheet.merge_cells("A4:C4")
125
- sheet["A1:D1"].each { |c| c.color = "FF0000"}
126
- sheet["A1:D4"].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
127
- end
154
+ wb.add_worksheet(:name => 'Merging Cells') do |sheet|
155
+ # cell level style overides when adding cells
156
+ sheet.add_row ["col 1", "col 2", "col 3", "col 4"], :sz => 16
157
+ sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
158
+ sheet.add_row [2, 3, 4, "=SUM(A3:C3)"]
159
+ sheet.add_row ["total", "", "", "=SUM(D2:D3)"]
160
+ sheet.merge_cells("A4:C4")
161
+ sheet["A1:D1"].each { |c| c.color = "FF0000"}
162
+ sheet["A1:D4"].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
163
+ end
128
164
 
129
165
  ##Generating A Bar Chart
130
166
 
131
- wb.add_worksheet(:name => "Bar Chart") do |sheet|
132
- sheet.add_row ["A Simple Bar Chart"]
133
- sheet.add_row ["First", "Second", "Third"]
134
- sheet.add_row [1, 2, 3]
135
- sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A4", :end_at => "F17") do |chart|
136
- chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :title => sheet["A1"]
137
- end
138
- end
167
+ wb.add_worksheet(:name => "Bar Chart") do |sheet|
168
+ sheet.add_row ["A Simple Bar Chart"]
169
+ sheet.add_row ["First", "Second", "Third"]
170
+ sheet.add_row [1, 2, 3]
171
+ sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A4", :end_at => "F17") do |chart|
172
+ chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :title => sheet["A1"]
173
+ end
174
+ end
175
+
176
+ ##Hide Gridlines in chart
177
+ wb.add_worksheet(:name => "Chart With No Gridlines") do |sheet|
178
+ sheet.add_row ["A Simple Bar Chart"]
179
+ sheet.add_row ["First", "Second", "Third"]
180
+ sheet.add_row [1, 2, 3]
181
+ sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A4", :end_at => "F17") do |chart|
182
+ chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :title => sheet["A1"]
183
+ chart.valAxis.gridlines = false
184
+ chart.catAxis.gridlines = false
185
+ end
186
+ end
139
187
 
140
188
  ##Generating A Pie Chart
141
189
 
142
- wb.add_worksheet(:name => "Pie Chart") do |sheet|
143
- sheet.add_row ["First", "Second", "Third", "Fourth"]
144
- sheet.add_row [1, 2, 3, "=PRODUCT(A2:C2)"]
145
- sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,2], :end_at => [5, 15], :title => "example 3: Pie Chart") do |chart|
146
- chart.add_series :data => sheet["A2:D2"], :labels => sheet["A1:D1"]
147
- end
148
- end
190
+ wb.add_worksheet(:name => "Pie Chart") do |sheet|
191
+ sheet.add_row ["First", "Second", "Third", "Fourth"]
192
+ sheet.add_row [1, 2, 3, "=PRODUCT(A2:C2)"]
193
+ sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,2], :end_at => [5, 15], :title => "example 3: Pie Chart") do |chart|
194
+ chart.add_series :data => sheet["A2:D2"], :labels => sheet["A1:D1"]
195
+ end
196
+ end
149
197
 
150
198
  ##Data over time
151
199
 
152
- wb.add_worksheet(:name=>'Charting Dates') do |sheet|
153
- # cell level style overides when adding cells
154
- sheet.add_row ['Date', 'Value'], :sz => 16
155
- sheet.add_row [Time.now - (7*60*60*24), 3]
156
- sheet.add_row [Time.now - (6*60*60*24), 7]
157
- sheet.add_row [Time.now - (5*60*60*24), 18]
158
- sheet.add_row [Time.now - (4*60*60*24), 1]
159
- sheet.add_chart(Axlsx::Bar3DChart) do |chart|
160
- chart.start_at "B7"
161
- chart.end_at "H27"
162
- chart.add_series(:data => sheet["B2:B5"], :labels => sheet["A2:A5"], :title => sheet["B1"])
163
- end
164
- end
200
+ wb.add_worksheet(:name=>'Charting Dates') do |sheet|
201
+ # cell level style overides when adding cells
202
+ sheet.add_row ['Date', 'Value'], :sz => 16
203
+ sheet.add_row [Time.now - (7*60*60*24), 3]
204
+ sheet.add_row [Time.now - (6*60*60*24), 7]
205
+ sheet.add_row [Time.now - (5*60*60*24), 18]
206
+ sheet.add_row [Time.now - (4*60*60*24), 1]
207
+ sheet.add_chart(Axlsx::Bar3DChart) do |chart|
208
+ chart.start_at "B7"
209
+ chart.end_at "H27"
210
+ chart.add_series(:data => sheet["B2:B5"], :labels => sheet["A2:A5"], :title => sheet["B1"])
211
+ end
212
+ end
165
213
 
166
214
  ##Generating A Line Chart
167
215
 
168
- wb.add_worksheet(:name => "Line Chart") do |sheet|
169
- sheet.add_row ["First", 1, 5, 7, 9]
170
- sheet.add_row ["Second", 5, 2, 14, 9]
171
- sheet.add_chart(Axlsx::Line3DChart, :title => "example 6: Line Chart", :rotX => 30, :rotY => 20) do |chart|
172
- chart.start_at 0, 2
173
- chart.end_at 10, 15
174
- chart.add_series :data => sheet["B1:E1"], :title => sheet["A1"]
175
- chart.add_series :data => sheet["B2:E2"], :title => sheet["A2"]
176
- end
177
- end
216
+ wb.add_worksheet(:name => "Line Chart") do |sheet|
217
+ sheet.add_row ["First", 1, 5, 7, 9]
218
+ sheet.add_row ["Second", 5, 2, 14, 9]
219
+ sheet.add_chart(Axlsx::Line3DChart, :title => "example 6: Line Chart", :rotX => 30, :rotY => 20) do |chart|
220
+ chart.start_at 0, 2
221
+ chart.end_at 10, 15
222
+ chart.add_series :data => sheet["B1:E1"], :title => sheet["A1"]
223
+ chart.add_series :data => sheet["B2:E2"], :title => sheet["A2"]
224
+ end
225
+ end
226
+
227
+ ##Generating A Scatter Chart
228
+
229
+ wb.add_worksheet(:name => "Scatter Chart") do |sheet|
230
+ sheet.add_row ["First", 1, 5, 7, 9]
231
+ sheet.add_row ["", 1, 25, 49, 81]
232
+ sheet.add_row ["Second", 5, 2, 14, 9]
233
+ sheet.add_row ["", 5, 10, 15, 20]
234
+ sheet.add_chart(Axlsx::ScatterChart, :title => "example 7: Scatter Chart") do |chart|
235
+ chart.start_at 0, 4
236
+ chart.end_at 10, 19
237
+ chart.add_series :xData => sheet["B1:E1"], :yData => sheet["B2:E2"], :title => sheet["A1"]
238
+ chart.add_series :xData => sheet["B3:E3"], :yData => sheet["B4:E4"], :title => sheet["A3"]
239
+ end
240
+ end
178
241
 
179
242
  ##Auto Filter
180
243
 
181
- wb.add_worksheet(:name => "Auto Filter") do |sheet|
182
- sheet.add_row ["Build Matrix"]
183
- sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
184
- sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
185
- sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
186
- sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
187
- sheet.auto_filter = "A2:D5"
188
- end
244
+ wb.add_worksheet(:name => "Auto Filter") do |sheet|
245
+ sheet.add_row ["Build Matrix"]
246
+ sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
247
+ sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
248
+ sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
249
+ sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
250
+ sheet.auto_filter = "A2:D5"
251
+ end
252
+
253
+ ##Tables
254
+
255
+ wb.add_worksheet(:name => "Table") do |sheet|
256
+ sheet.add_row ["Build Matrix"]
257
+ sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
258
+ sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
259
+ sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
260
+ sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
261
+ sheet.add_table "A2:D5", :name => 'Build Matrix'
262
+ end
263
+
264
+
265
+ ##Specifying Column Widths
266
+
267
+ wb.add_worksheet(:name => "custom column widths") do |sheet|
268
+ sheet.add_row ["I use autowidth and am very wide", "I use a custom width and am narrow"]
269
+ sheet.add_row ['abcdefg', 'This is a very long text and should flow into the right cell', nil, 'xxx' ]
270
+ sheet.column_widths nil, 3, 5, nil
271
+ end
272
+
273
+ ##Fit to page printing
274
+
275
+ wb.add_worksheet(:name => "fit to page") do |sheet|
276
+ sheet.add_row ['this all goes on one page']
277
+ sheet.fit_to_page = true
278
+ end
279
+
280
+
281
+ ##Hide Gridlines in worksheet
282
+ wb.add_worksheet(:name => "No Gridlines") do |sheet|
283
+ sheet.add_row ["This", "Sheet", "Hides", "Gridlines"]
284
+ sheet.show_gridlines = false
285
+ end
286
+
287
+ ##Specify Page Margins for printing
288
+ margins = {:left => 3, :right => 3, :top => 1.2, :bottom => 1.2, :header => 0.7, :footer => 0.7}
289
+ wb.add_worksheet(:name => "print margins", :page_margins => margins) do |sheet|
290
+ sheet.add_row ["this sheet uses customized page margins for printing"]
291
+ end
189
292
 
190
293
  ##Validate and Serialize
191
294
 
192
- p.validate.each { |e| puts e.message }
193
- p.serialize("example.xlsx")
295
+ #p.validate.each { |e| puts e.message }
296
+ p.serialize("example.xlsx")
297
+
298
+ s = p.to_stream()
299
+ File.open('example_streamed.xlsx', 'w') { |f| f.write(s.read) }
300
+
301
+
302
+ ##Using Shared Strings
303
+ p.use_shared_strings = true
304
+ p.serialize("shared_strings_example.xlsx")
305
+
306
+
307
+ ##Disabling Autowidth
308
+ p = Axlsx::Package.new
309
+ p.use_autowidth = false
310
+ wb = p.workbook
311
+ wb.add_worksheet(:name => "No Magick") do | sheet |
312
+ sheet.add_row ['oh look! no autowidth - and no magick loaded in your process']
313
+ end
314
+ p.validate.each { |e| puts e.message }
315
+ p.serialize("no-use_autowidth.xlsx")
316
+
194
317
 
195
-
196
318
 
Binary file
Binary file
Binary file
@@ -1,23 +1,24 @@
1
+ # encoding: UTF-8
1
2
  module Axlsx
2
3
  require 'axlsx/content_type/default.rb'
3
4
  require 'axlsx/content_type/override.rb'
4
5
 
5
- # ContentTypes used in the package. This is automatcially managed by the package package.
6
+ # ContentTypes used in the package. This is automatically managed by the package package.
6
7
  class ContentType < SimpleTypedList
7
-
8
+
8
9
  def initialize
9
10
  super [Override, Default]
10
11
  end
11
-
12
- # Generates the xml document for [Content_Types].xml
13
- # @return [String] The document as a string.
14
- def to_xml()
15
- builder = Nokogiri::XML::Builder.new(:encoding => ENCODING) do |xml|
16
- xml.Types(:xmlns => Axlsx::XML_NS_T) {
17
- each { |type| type.to_xml(xml) }
18
- }
19
- end
20
- builder.to_xml(:save_with => 0)
12
+
13
+ # Serializes the object
14
+ # @param [String] str
15
+ # @return [String]
16
+ def to_xml_string(str = '')
17
+ str << '<?xml version="1.0" encoding="UTF-8"?>'
18
+ str << '<Types xmlns="' << XML_NS_T << '">'
19
+ each { |type| type.to_xml_string(str) }
20
+ str << '</Types>'
21
21
  end
22
+
22
23
  end
23
24
  end
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  module Axlsx
2
3
  # An default content part. These parts are automatically created by for you based on the content of your package.
3
4
  class Default
@@ -7,7 +8,7 @@ module Axlsx
7
8
  attr_reader :Extension
8
9
 
9
10
  # The type of content.
10
- # @return [String]
11
+ # @return [String]
11
12
  attr_reader :ContentType
12
13
 
13
14
  #Creates a new Default object
@@ -18,7 +19,7 @@ module Axlsx
18
19
  raise ArgumentError, "Extension and ContentType are required" unless options[:Extension] && options[:ContentType]
19
20
  options.each do |o|
20
21
  self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
21
- end
22
+ end
22
23
  end
23
24
  # Sets the file extension for this content type.
24
25
  def Extension=(v) Axlsx::validate_string v; @Extension = v end
@@ -27,11 +28,14 @@ module Axlsx
27
28
  # @see Axlsx#validate_content_type
28
29
  def ContentType=(v) Axlsx::validate_content_type v; @ContentType = v end
29
30
 
30
- # Serializes the object to xml
31
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
31
+ # Serializes the object
32
+ # @param [String] str
32
33
  # @return [String]
33
- def to_xml(xml)
34
- xml.Default(self.instance_values)
34
+ def to_xml_string(str = '')
35
+ str << '<Default '
36
+ str << instance_values.map { |key, value| '' << key.to_s << '="' << value.to_s << '"' }.join(' ')
37
+ str << '/>'
35
38
  end
39
+
36
40
  end
37
41
  end
@@ -1,13 +1,14 @@
1
+ # encoding: UTF-8
1
2
  module Axlsx
2
3
  # An override content part. These parts are automatically created by for you based on the content of your package.
3
4
  class Override
4
5
 
5
6
  # The type of content.
6
- # @return [String]
7
+ # @return [String]
7
8
  attr_reader :ContentType
8
9
 
9
10
  # The name and location of the part.
10
- # @return [String]
11
+ # @return [String]
11
12
  attr_reader :PartName
12
13
 
13
14
  #Creates a new Override object
@@ -18,20 +19,24 @@ module Axlsx
18
19
  raise ArgumentError, "PartName and ContentType are required" unless options[:PartName] && options[:ContentType]
19
20
  options.each do |o|
20
21
  self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
21
- end
22
+ end
22
23
  end
23
24
 
24
25
  # The name and location of the part.
25
26
  def PartName=(v) Axlsx::validate_string v; @PartName = v end
26
27
 
27
- # The content type.
28
+ # The content type.
28
29
  # @see Axlsx#validate_content_type
29
30
  def ContentType=(v) Axlsx::validate_content_type v; @ContentType = v end
30
31
 
31
- # Serializes the Override object to xml
32
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
33
- def to_xml(xml)
34
- xml.Override(self.instance_values)
32
+ # Serializes the object
33
+ # @param [String] str
34
+ # @return [String]
35
+ def to_xml_string(str = '')
36
+ str << '<Override '
37
+ str << instance_values.map { |key, value| '' << key.to_s << '="' << value.to_s << '"' }.join(' ')
38
+ str << '/>'
35
39
  end
40
+
36
41
  end
37
42
  end