axlsx 1.0.15 → 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 (176) hide show
  1. data/.yardopts +1 -0
  2. data/CHANGELOG.md +40 -2
  3. data/README.md +223 -92
  4. data/examples/example.csv +1000 -0
  5. data/examples/example.rb +266 -132
  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 +27 -12
  22. data/lib/axlsx/drawing/graphic_frame.rb +22 -21
  23. data/lib/axlsx/drawing/hlink_click.rb~ +0 -0
  24. data/lib/axlsx/drawing/hyperlink.rb +96 -0
  25. data/lib/axlsx/drawing/hyperlink.rb~ +64 -0
  26. data/lib/axlsx/drawing/line_3D_chart.rb +31 -28
  27. data/lib/axlsx/drawing/line_series.rb +12 -11
  28. data/lib/axlsx/drawing/marker.rb +11 -8
  29. data/lib/axlsx/drawing/named_axis_data.rb +36 -0
  30. data/lib/axlsx/drawing/one_cell_anchor.rb +18 -16
  31. data/lib/axlsx/drawing/pic.rb +47 -33
  32. data/lib/axlsx/drawing/picture_locking.rb +22 -18
  33. data/lib/axlsx/drawing/pie_3D_chart.rb +11 -8
  34. data/lib/axlsx/drawing/pie_series.rb +16 -12
  35. data/lib/axlsx/drawing/scaling.rb +11 -10
  36. data/lib/axlsx/drawing/scatter_chart.rb +69 -0
  37. data/lib/axlsx/drawing/scatter_series.rb +39 -0
  38. data/lib/axlsx/drawing/ser_axis.rb +11 -10
  39. data/lib/axlsx/drawing/series.rb +16 -15
  40. data/lib/axlsx/drawing/series_title.rb +15 -14
  41. data/lib/axlsx/drawing/title.rb +27 -26
  42. data/lib/axlsx/drawing/two_cell_anchor.rb +19 -20
  43. data/lib/axlsx/drawing/val_axis.rb +9 -7
  44. data/lib/axlsx/drawing/val_axis_data.rb +18 -17
  45. data/lib/axlsx/drawing/view_3D.rb +23 -20
  46. data/lib/axlsx/package.rb +117 -52
  47. data/lib/axlsx/rels/relationship.rb +27 -8
  48. data/lib/axlsx/rels/relationships.rb +9 -2
  49. data/lib/axlsx/stylesheet/#num_fmt.rb# +69 -0
  50. data/lib/axlsx/stylesheet/border.rb +28 -23
  51. data/lib/axlsx/stylesheet/border_pr.rb +17 -15
  52. data/lib/axlsx/stylesheet/cell_alignment.rb +24 -21
  53. data/lib/axlsx/stylesheet/cell_protection.rb +11 -7
  54. data/lib/axlsx/stylesheet/cell_style.rb +9 -5
  55. data/lib/axlsx/stylesheet/color.rb +21 -14
  56. data/lib/axlsx/stylesheet/fill.rb +8 -5
  57. data/lib/axlsx/stylesheet/font.rb +22 -14
  58. data/lib/axlsx/stylesheet/gradient_fill.rb +20 -17
  59. data/lib/axlsx/stylesheet/gradient_stop.rb +10 -6
  60. data/lib/axlsx/stylesheet/num_fmt.rb +13 -6
  61. data/lib/axlsx/stylesheet/pattern_fill.rb +26 -10
  62. data/lib/axlsx/stylesheet/styles.rb +53 -41
  63. data/lib/axlsx/stylesheet/table_style.rb +10 -4
  64. data/lib/axlsx/stylesheet/table_style_element.rb +11 -7
  65. data/lib/axlsx/stylesheet/table_styles.rb +12 -8
  66. data/lib/axlsx/stylesheet/xf.rb +30 -25
  67. data/lib/axlsx/util/cbf.rb +69 -33
  68. data/lib/axlsx/util/constants.rb +39 -20
  69. data/lib/axlsx/util/ms_off_crypto.rb +10 -10
  70. data/lib/axlsx/util/parser.rb +1 -0
  71. data/lib/axlsx/util/simple_typed_list.rb +20 -10
  72. data/lib/axlsx/util/storage.rb +1 -1
  73. data/lib/axlsx/util/validators.rb +23 -7
  74. data/lib/axlsx/version.rb +5 -2
  75. data/lib/axlsx/workbook/shared_strings_table.rb +69 -0
  76. data/lib/axlsx/workbook/shared_strings_table.rb~ +69 -0
  77. data/lib/axlsx/workbook/workbook.rb +82 -26
  78. data/lib/axlsx/workbook/worksheet/cell.rb +172 -117
  79. data/lib/axlsx/workbook/worksheet/col.rb +114 -0
  80. data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
  81. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +29 -0
  82. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -0
  83. data/lib/axlsx/workbook/worksheet/row.rb +53 -21
  84. data/lib/axlsx/workbook/worksheet/shared_strings_table.rb~ +0 -0
  85. data/lib/axlsx/workbook/worksheet/table.rb +96 -0
  86. data/lib/axlsx/workbook/worksheet/table.rb~ +97 -0
  87. data/lib/axlsx/workbook/worksheet/worksheet.rb +270 -121
  88. data/lib/axlsx.rb +41 -14
  89. data/lib/schema/dc.xsd +5 -5
  90. data/lib/schema/dcmitype.xsd +5 -3
  91. data/lib/schema/dcterms.xsd +15 -15
  92. data/lib/schema/opc-coreProperties.xsd +6 -2
  93. data/lib/schema/xml.xsd +7 -8
  94. data/test/#benchmark.txt# +7 -0
  95. data/test/#tc_helper.rb# +3 -0
  96. data/test/benchmark.rb +81 -0
  97. data/test/benchmark.rb~ +0 -0
  98. data/test/benchmark.txt +6 -0
  99. data/test/benchmark.txt~ +6 -0
  100. data/test/content_type/tc_content_type.rb +31 -31
  101. data/test/content_type/tc_default.rb +9 -22
  102. data/test/content_type/tc_override.rb +8 -21
  103. data/test/doc_props/tc_app.rb +2 -8
  104. data/test/doc_props/tc_core.rb +6 -7
  105. data/test/drawing/tc_axis.rb +7 -3
  106. data/test/drawing/tc_bar_3D_chart.rb +6 -7
  107. data/test/drawing/tc_bar_series.rb +4 -5
  108. data/test/drawing/tc_cat_axis.rb +2 -3
  109. data/test/drawing/tc_cat_axis_data.rb +2 -3
  110. data/test/drawing/tc_chart.rb +13 -14
  111. data/test/drawing/tc_drawing.rb +7 -8
  112. data/test/drawing/tc_graphic_frame.rb +3 -4
  113. data/test/drawing/tc_hyperlink.rb +69 -0
  114. data/test/drawing/tc_line_3d_chart.rb +5 -6
  115. data/test/drawing/tc_line_series.rb +3 -4
  116. data/test/drawing/tc_marker.rb +3 -4
  117. data/test/drawing/tc_one_cell_anchor.rb +6 -7
  118. data/test/drawing/tc_pic.rb +13 -8
  119. data/test/drawing/tc_picture_locking.rb +2 -3
  120. data/test/drawing/tc_pie_3D_chart.rb +5 -6
  121. data/test/drawing/tc_pie_series.rb +4 -5
  122. data/test/drawing/tc_scaling.rb +3 -4
  123. data/test/drawing/tc_scatter_chart.rb +43 -0
  124. data/test/drawing/tc_scatter_series.rb +20 -0
  125. data/test/drawing/tc_ser_axis.rb +2 -3
  126. data/test/drawing/tc_series.rb +4 -5
  127. data/test/drawing/tc_series_title.rb +4 -5
  128. data/test/drawing/tc_title.rb +4 -5
  129. data/test/drawing/tc_two_cell_anchor.rb +4 -5
  130. data/test/drawing/tc_val_axis.rb +2 -3
  131. data/test/drawing/tc_val_axis_data.rb +2 -3
  132. data/test/drawing/tc_view_3D.rb +6 -7
  133. data/test/example.csv +1000 -0
  134. data/test/example.xlsx +0 -0
  135. data/test/example_streamed.xlsx +0 -0
  136. data/test/profile.rb +33 -0
  137. data/test/rels/tc_relationship.rb +10 -6
  138. data/test/rels/tc_relationships.rb +4 -5
  139. data/test/stylesheet/tc_border.rb +3 -4
  140. data/test/stylesheet/tc_border_pr.rb +3 -4
  141. data/test/stylesheet/tc_cell_alignment.rb +10 -6
  142. data/test/stylesheet/tc_cell_protection.rb +2 -3
  143. data/test/stylesheet/tc_cell_style.rb +2 -3
  144. data/test/stylesheet/tc_color.rb +2 -3
  145. data/test/stylesheet/tc_fill.rb +1 -2
  146. data/test/stylesheet/tc_font.rb +12 -5
  147. data/test/stylesheet/tc_gradient_fill.rb +1 -2
  148. data/test/stylesheet/tc_gradient_stop.rb +1 -2
  149. data/test/stylesheet/tc_num_fmt.rb +1 -2
  150. data/test/stylesheet/tc_pattern_fill.rb +3 -4
  151. data/test/stylesheet/tc_styles.rb +16 -6
  152. data/test/stylesheet/tc_table_style.rb +2 -3
  153. data/test/stylesheet/tc_table_style_element.rb +2 -3
  154. data/test/stylesheet/tc_table_styles.rb +3 -4
  155. data/test/stylesheet/tc_xf.rb +16 -17
  156. data/test/tc_axlsx.rb +39 -0
  157. data/test/tc_axlsx.rb~ +0 -0
  158. data/test/tc_helper.rb +3 -0
  159. data/test/tc_helper.rb~ +3 -0
  160. data/test/tc_package.rb +43 -9
  161. data/test/util/tc_simple_typed_list.rb +8 -9
  162. data/test/util/tc_validators.rb +7 -8
  163. data/test/workbook/tc_shared_strings_table.rb +38 -0
  164. data/test/workbook/tc_workbook.rb +32 -6
  165. data/test/workbook/worksheet/table/tc_table.rb +71 -0
  166. data/test/workbook/worksheet/table/tc_table.rb~ +72 -0
  167. data/test/workbook/worksheet/tc_cell.rb +70 -13
  168. data/test/workbook/worksheet/tc_col.rb +59 -0
  169. data/test/workbook/worksheet/tc_col.rb~ +10 -0
  170. data/test/workbook/worksheet/tc_date_time_converter.rb +126 -0
  171. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  172. data/test/workbook/worksheet/tc_row.rb +54 -4
  173. data/test/workbook/worksheet/tc_worksheet.rb +198 -31
  174. metadata +167 -111
  175. data/test/drawing/tc_line_series.tc~ +0 -34
  176. data/test/drawing/tc_picture_locking.rb~ +0 -77
data/examples/example.rb CHANGED
@@ -1,184 +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
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
27
52
 
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 [Time.now, 0.2, 32], :style => [date, percent, padded]
36
- end
37
- end
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
64
+
65
+ ##Add an Image with a hyperlink
66
+
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
49
76
 
50
77
  ##Asian Language Support
51
78
 
52
- wb.add_worksheet(:name => "Unicode Support") do |sheet|
53
- sheet.add_row ["日本語"]
54
- sheet.add_row ["华语/華語"]
55
- sheet.add_row ["한국어/조선말"]
56
- end
79
+ wb.add_worksheet(:name => "日本語でのシート名") do |sheet|
80
+ sheet.add_row ["日本語"]
81
+ sheet.add_row ["华语/華語"]
82
+ sheet.add_row ["한국어/조선말"]
83
+ end
57
84
 
58
85
  ##Styling Columns
59
86
 
60
- wb.styles do |s|
61
- percent = s.add_style :num_fmt => 9
62
- wb.add_worksheet(:name => "Styling Columns") do |sheet|
63
- sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
64
- sheet.add_row [1, 2, 0.3, 4]
65
- sheet.add_row [1, 2, 0.2, 4]
66
- sheet.add_row [1, 2, 0.1, 4]
67
- sheet.col_style 2, percent, :row_offset => 1
68
- end
69
- 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
70
111
 
71
112
  ##Styling Rows
72
113
 
73
- wb.styles do |s|
74
- head = s.add_style :bg_color => "00", :fg_color => "FF"
75
- percent = s.add_style :num_fmt => 9
76
- wb.add_worksheet(:name => "Styling Rows") do |sheet|
77
- sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
78
- sheet.add_row [1, 2, 0.3, 4]
79
- sheet.add_row [1, 2, 0.2, 4]
80
- sheet.add_row [1, 2, 0.1, 4]
81
- sheet.col_style 2, percent, :row_offset => 1
82
- sheet.row_style 0, head
83
- end
84
- 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
85
126
 
86
127
  ##Styling Cell Overrides
87
128
 
88
- wb.add_worksheet(:name => "Cell Level Style Overrides") do |sheet|
89
- # cell level style overides when adding cells
90
- sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4'], :sz => 16
91
- sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
92
- # cell level style overrides via sheet range
93
- sheet["A1:D1"].each { |c| c.color = "FF0000"}
94
- sheet['A1:D2'].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
95
- 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
96
137
 
97
138
  ##Using formula
98
139
 
99
- wb.add_worksheet(:name => "Using Formulas") do |sheet|
100
- sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
101
- sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
102
- 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
103
151
 
104
152
  ##Merging Cells.
105
153
 
106
- wb.add_worksheet(:name => 'Merging Cells') do |sheet|
107
- # cell level style overides when adding cells
108
- sheet.add_row ["col 1", "col 2", "col 3", "col 4"], :sz => 16
109
- sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
110
- sheet.add_row [2, 3, 4, "=SUM(A3:C3)"]
111
- sheet.add_row ["total", "", "", "=SUM(D2:D3)"]
112
- sheet.merge_cells("A4:C4")
113
- sheet["A1:D1"].each { |c| c.color = "FF0000"}
114
- sheet["A1:D4"].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
115
- 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
116
164
 
117
165
  ##Generating A Bar Chart
118
166
 
119
- wb.add_worksheet(:name => "Bar Chart") do |sheet|
120
- sheet.add_row ["A Simple Bar Chart"]
121
- sheet.add_row ["First", "Second", "Third"]
122
- sheet.add_row [1, 2, 3]
123
- sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A4", :end_at => "F17") do |chart|
124
- chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :title => sheet["A1"]
125
- end
126
- 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
127
187
 
128
188
  ##Generating A Pie Chart
129
189
 
130
- wb.add_worksheet(:name => "Pie Chart") do |sheet|
131
- sheet.add_row ["First", "Second", "Third", "Fourth"]
132
- sheet.add_row [1, 2, 3, "=PRODUCT(A2:C2)"]
133
- sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,2], :end_at => [5, 15], :title => "example 3: Pie Chart") do |chart|
134
- chart.add_series :data => sheet["A2:D2"], :labels => sheet["A1:D1"]
135
- end
136
- 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
137
197
 
138
198
  ##Data over time
139
199
 
140
- wb.add_worksheet(:name=>'Charting Dates') do |sheet|
141
- # cell level style overides when adding cells
142
- sheet.add_row ['Date', 'Value'], :sz => 16
143
- sheet.add_row [Time.now - (7*60*60*24), 3]
144
- sheet.add_row [Time.now - (6*60*60*24), 7]
145
- sheet.add_row [Time.now - (5*60*60*24), 18]
146
- sheet.add_row [Time.now - (4*60*60*24), 1]
147
- sheet.add_chart(Axlsx::Bar3DChart) do |chart|
148
- chart.start_at "B7"
149
- chart.end_at "H27"
150
- chart.add_series(:data => sheet["B2:B5"], :labels => sheet["A2:A5"], :title => sheet["B1"])
151
- end
152
- 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
153
213
 
154
214
  ##Generating A Line Chart
155
215
 
156
- wb.add_worksheet(:name => "Line Chart") do |sheet|
157
- sheet.add_row ["First", 1, 5, 7, 9]
158
- sheet.add_row ["Second", 5, 2, 14, 9]
159
- sheet.add_chart(Axlsx::Line3DChart, :title => "example 6: Line Chart", :rotX => 30, :rotY => 20) do |chart|
160
- chart.start_at 0, 2
161
- chart.end_at 10, 15
162
- chart.add_series :data => sheet["B1:E1"], :title => sheet["A1"]
163
- chart.add_series :data => sheet["B2:E2"], :title => sheet["A2"]
164
- end
165
- 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
166
241
 
167
242
  ##Auto Filter
168
243
 
169
- wb.add_worksheet(:name => "Auto Filter") do |sheet|
170
- sheet.add_row ["Build Matrix"]
171
- sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
172
- sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
173
- sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
174
- sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
175
- sheet.auto_filter = "A2:D5"
176
- 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
177
292
 
178
293
  ##Validate and Serialize
179
294
 
180
- p.validate.each { |e| puts e.message }
181
- 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
+
182
317
 
183
-
184
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
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