axlsx 1.0.17 → 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 (167) hide show
  1. data/CHANGELOG.md +11 -3
  2. data/README.md +159 -51
  3. data/examples/example.csv +1000 -0
  4. data/examples/example.rb +255 -150
  5. data/examples/example.xlsx +0 -0
  6. data/examples/example_streamed.xlsx +0 -0
  7. data/examples/no-use_autowidth.xlsx +0 -0
  8. data/examples/shared_strings_example.xlsx +0 -0
  9. data/lib/axlsx/content_type/content_type.rb +12 -12
  10. data/lib/axlsx/content_type/default.rb +9 -6
  11. data/lib/axlsx/content_type/override.rb +12 -8
  12. data/lib/axlsx/doc_props/app.rb +37 -40
  13. data/lib/axlsx/doc_props/core.rb +12 -17
  14. data/lib/axlsx/drawing/axis.rb +38 -19
  15. data/lib/axlsx/drawing/bar_3D_chart.rb +33 -32
  16. data/lib/axlsx/drawing/bar_series.rb +13 -14
  17. data/lib/axlsx/drawing/cat_axis.rb +15 -14
  18. data/lib/axlsx/drawing/cat_axis_data.rb +16 -18
  19. data/lib/axlsx/drawing/chart.rb +39 -40
  20. data/lib/axlsx/drawing/drawing.rb +15 -12
  21. data/lib/axlsx/drawing/graphic_frame.rb +21 -21
  22. data/lib/axlsx/drawing/hyperlink.rb +12 -11
  23. data/lib/axlsx/drawing/line_3D_chart.rb +30 -28
  24. data/lib/axlsx/drawing/line_series.rb +11 -11
  25. data/lib/axlsx/drawing/marker.rb +10 -8
  26. data/lib/axlsx/drawing/named_axis_data.rb +36 -0
  27. data/lib/axlsx/drawing/one_cell_anchor.rb +17 -16
  28. data/lib/axlsx/drawing/pic.rb +25 -37
  29. data/lib/axlsx/drawing/picture_locking.rb +21 -18
  30. data/lib/axlsx/drawing/pie_3D_chart.rb +10 -8
  31. data/lib/axlsx/drawing/pie_series.rb +15 -12
  32. data/lib/axlsx/drawing/scaling.rb +10 -10
  33. data/lib/axlsx/drawing/scatter_chart.rb +69 -0
  34. data/lib/axlsx/drawing/scatter_series.rb +39 -0
  35. data/lib/axlsx/drawing/ser_axis.rb +10 -10
  36. data/lib/axlsx/drawing/series.rb +15 -15
  37. data/lib/axlsx/drawing/series_title.rb +14 -14
  38. data/lib/axlsx/drawing/title.rb +26 -26
  39. data/lib/axlsx/drawing/two_cell_anchor.rb +18 -20
  40. data/lib/axlsx/drawing/val_axis.rb +8 -7
  41. data/lib/axlsx/drawing/val_axis_data.rb +17 -17
  42. data/lib/axlsx/drawing/view_3D.rb +22 -20
  43. data/lib/axlsx/package.rb +60 -43
  44. data/lib/axlsx/rels/relationship.rb +11 -8
  45. data/lib/axlsx/rels/relationships.rb +7 -1
  46. data/lib/axlsx/stylesheet/#num_fmt.rb# +69 -0
  47. data/lib/axlsx/stylesheet/border.rb +27 -23
  48. data/lib/axlsx/stylesheet/border_pr.rb +16 -15
  49. data/lib/axlsx/stylesheet/cell_alignment.rb +23 -21
  50. data/lib/axlsx/stylesheet/cell_protection.rb +10 -7
  51. data/lib/axlsx/stylesheet/cell_style.rb +8 -5
  52. data/lib/axlsx/stylesheet/color.rb +20 -14
  53. data/lib/axlsx/stylesheet/fill.rb +7 -5
  54. data/lib/axlsx/stylesheet/font.rb +21 -14
  55. data/lib/axlsx/stylesheet/gradient_fill.rb +19 -16
  56. data/lib/axlsx/stylesheet/gradient_stop.rb +9 -5
  57. data/lib/axlsx/stylesheet/num_fmt.rb +12 -6
  58. data/lib/axlsx/stylesheet/pattern_fill.rb +25 -10
  59. data/lib/axlsx/stylesheet/styles.rb +47 -35
  60. data/lib/axlsx/stylesheet/table_style.rb +9 -4
  61. data/lib/axlsx/stylesheet/table_style_element.rb +10 -7
  62. data/lib/axlsx/stylesheet/table_styles.rb +11 -8
  63. data/lib/axlsx/stylesheet/xf.rb +29 -25
  64. data/lib/axlsx/util/constants.rb +20 -14
  65. data/lib/axlsx/util/simple_typed_list.rb +18 -9
  66. data/lib/axlsx/util/validators.rb +13 -6
  67. data/lib/axlsx/version.rb +1 -1
  68. data/lib/axlsx/workbook/shared_strings_table.rb +19 -21
  69. data/lib/axlsx/workbook/workbook.rb +58 -34
  70. data/lib/axlsx/workbook/worksheet/cell.rb +149 -132
  71. data/lib/axlsx/workbook/worksheet/col.rb +114 -0
  72. data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
  73. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +29 -0
  74. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -0
  75. data/lib/axlsx/workbook/worksheet/row.rb +40 -23
  76. data/lib/axlsx/workbook/worksheet/table.rb +96 -0
  77. data/lib/axlsx/workbook/worksheet/table.rb~ +97 -0
  78. data/lib/axlsx/workbook/worksheet/worksheet.rb +243 -127
  79. data/lib/axlsx.rb +30 -9
  80. data/lib/schema/dc.xsd +5 -5
  81. data/lib/schema/dcmitype.xsd +5 -3
  82. data/lib/schema/dcterms.xsd +15 -15
  83. data/lib/schema/opc-coreProperties.xsd +6 -2
  84. data/lib/schema/xml.xsd +7 -8
  85. data/test/#benchmark.txt# +7 -0
  86. data/test/#tc_helper.rb# +3 -0
  87. data/test/benchmark.rb +81 -0
  88. data/test/benchmark.rb~ +0 -0
  89. data/test/benchmark.txt +6 -0
  90. data/test/benchmark.txt~ +6 -0
  91. data/test/content_type/tc_content_type.rb +30 -32
  92. data/test/content_type/tc_default.rb +8 -23
  93. data/test/content_type/tc_override.rb +7 -21
  94. data/test/doc_props/tc_app.rb +2 -8
  95. data/test/doc_props/tc_core.rb +6 -7
  96. data/test/drawing/tc_axis.rb +7 -3
  97. data/test/drawing/tc_bar_3D_chart.rb +6 -7
  98. data/test/drawing/tc_bar_series.rb +4 -5
  99. data/test/drawing/tc_cat_axis.rb +2 -3
  100. data/test/drawing/tc_cat_axis_data.rb +2 -3
  101. data/test/drawing/tc_chart.rb +13 -14
  102. data/test/drawing/tc_drawing.rb +7 -8
  103. data/test/drawing/tc_graphic_frame.rb +3 -4
  104. data/test/drawing/tc_hyperlink.rb +2 -3
  105. data/test/drawing/tc_line_3d_chart.rb +5 -6
  106. data/test/drawing/tc_line_series.rb +3 -4
  107. data/test/drawing/tc_marker.rb +3 -4
  108. data/test/drawing/tc_one_cell_anchor.rb +6 -7
  109. data/test/drawing/tc_pic.rb +8 -9
  110. data/test/drawing/tc_picture_locking.rb +2 -3
  111. data/test/drawing/tc_pie_3D_chart.rb +5 -6
  112. data/test/drawing/tc_pie_series.rb +4 -5
  113. data/test/drawing/tc_scaling.rb +3 -4
  114. data/test/drawing/tc_scatter_chart.rb +43 -0
  115. data/test/drawing/tc_scatter_series.rb +20 -0
  116. data/test/drawing/tc_ser_axis.rb +2 -3
  117. data/test/drawing/tc_series.rb +4 -5
  118. data/test/drawing/tc_series_title.rb +4 -5
  119. data/test/drawing/tc_title.rb +4 -5
  120. data/test/drawing/tc_two_cell_anchor.rb +4 -5
  121. data/test/drawing/tc_val_axis.rb +2 -3
  122. data/test/drawing/tc_val_axis_data.rb +2 -3
  123. data/test/drawing/tc_view_3D.rb +6 -7
  124. data/test/example.csv +1000 -0
  125. data/test/example.xlsx +0 -0
  126. data/test/example_streamed.xlsx +0 -0
  127. data/test/profile.rb +33 -0
  128. data/test/rels/tc_relationship.rb +5 -6
  129. data/test/rels/tc_relationships.rb +4 -5
  130. data/test/stylesheet/tc_border.rb +3 -4
  131. data/test/stylesheet/tc_border_pr.rb +3 -4
  132. data/test/stylesheet/tc_cell_alignment.rb +10 -6
  133. data/test/stylesheet/tc_cell_protection.rb +2 -3
  134. data/test/stylesheet/tc_cell_style.rb +2 -3
  135. data/test/stylesheet/tc_color.rb +2 -3
  136. data/test/stylesheet/tc_fill.rb +1 -2
  137. data/test/stylesheet/tc_font.rb +12 -5
  138. data/test/stylesheet/tc_gradient_fill.rb +1 -2
  139. data/test/stylesheet/tc_gradient_stop.rb +1 -2
  140. data/test/stylesheet/tc_num_fmt.rb +1 -2
  141. data/test/stylesheet/tc_pattern_fill.rb +3 -4
  142. data/test/stylesheet/tc_styles.rb +16 -6
  143. data/test/stylesheet/tc_table_style.rb +2 -3
  144. data/test/stylesheet/tc_table_style_element.rb +2 -3
  145. data/test/stylesheet/tc_table_styles.rb +3 -4
  146. data/test/stylesheet/tc_xf.rb +16 -17
  147. data/test/tc_axlsx.rb +39 -0
  148. data/test/tc_axlsx.rb~ +0 -0
  149. data/test/tc_helper.rb +3 -0
  150. data/test/tc_helper.rb~ +3 -0
  151. data/test/tc_package.rb +13 -10
  152. data/test/util/tc_simple_typed_list.rb +8 -9
  153. data/test/util/tc_validators.rb +7 -8
  154. data/test/workbook/tc_shared_strings_table.rb +5 -6
  155. data/test/workbook/tc_workbook.rb +24 -6
  156. data/test/workbook/worksheet/table/tc_table.rb +71 -0
  157. data/test/workbook/worksheet/table/tc_table.rb~ +72 -0
  158. data/test/workbook/worksheet/tc_cell.rb +62 -18
  159. data/test/workbook/worksheet/tc_col.rb +59 -0
  160. data/test/workbook/worksheet/tc_col.rb~ +10 -0
  161. data/test/workbook/worksheet/tc_date_time_converter.rb +126 -0
  162. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  163. data/test/workbook/worksheet/tc_row.rb +54 -4
  164. data/test/workbook/worksheet/tc_worksheet.rb +177 -34
  165. metadata +69 -41
  166. data/test/drawing/tc_hyperlink.rb~ +0 -71
  167. data/test/workbook/tc_shared_strings_table.rb~ +0 -8
data/examples/example.rb CHANGED
@@ -1,213 +1,318 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/env ruby -w -s
2
2
  # -*- coding: utf-8 -*-
3
- require 'axlsx.rb'
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
+
189
264
 
190
265
  ##Specifying Column Widths
191
266
 
192
- wb.add_worksheet(:name => "custom column widths") do |sheet|
193
- sheet.add_row ["I use autowidth and am very wide", "I use a custom width and am narrow"]
194
- sheet.column_widths nil, 3
195
- end
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
196
292
 
197
293
  ##Validate and Serialize
198
294
 
199
- p.validate.each { |e| puts e.message }
200
- p.serialize("example.xlsx")
295
+ #p.validate.each { |e| puts e.message }
296
+ p.serialize("example.xlsx")
201
297
 
202
- s = p.to_stream()
203
- File.open('example_streamed.xlsx', 'w') { |f| f.write(s.read) }
298
+ s = p.to_stream()
299
+ File.open('example_streamed.xlsx', 'w') { |f| f.write(s.read) }
204
300
 
205
301
 
206
302
  ##Using Shared Strings
303
+ p.use_shared_strings = true
304
+ p.serialize("shared_strings_example.xlsx")
305
+
207
306
 
208
- p.use_shared_strings = true
209
- p.serialize("shared_strings_example.xlsx")
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")
210
316
 
211
317
 
212
-
213
318
 
Binary file
Binary file
Binary file
@@ -3,22 +3,22 @@ module Axlsx
3
3
  require 'axlsx/content_type/default.rb'
4
4
  require 'axlsx/content_type/override.rb'
5
5
 
6
- # 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.
7
7
  class ContentType < SimpleTypedList
8
-
8
+
9
9
  def initialize
10
10
  super [Override, Default]
11
11
  end
12
-
13
- # Generates the xml document for [Content_Types].xml
14
- # @return [String] The document as a string.
15
- def to_xml()
16
- builder = Nokogiri::XML::Builder.new(:encoding => ENCODING) do |xml|
17
- xml.Types(:xmlns => Axlsx::XML_NS_T) {
18
- each { |type| type.to_xml(xml) }
19
- }
20
- end
21
- 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>'
22
21
  end
22
+
23
23
  end
24
24
  end
@@ -8,7 +8,7 @@ module Axlsx
8
8
  attr_reader :Extension
9
9
 
10
10
  # The type of content.
11
- # @return [String]
11
+ # @return [String]
12
12
  attr_reader :ContentType
13
13
 
14
14
  #Creates a new Default object
@@ -19,7 +19,7 @@ module Axlsx
19
19
  raise ArgumentError, "Extension and ContentType are required" unless options[:Extension] && options[:ContentType]
20
20
  options.each do |o|
21
21
  self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
22
- end
22
+ end
23
23
  end
24
24
  # Sets the file extension for this content type.
25
25
  def Extension=(v) Axlsx::validate_string v; @Extension = v end
@@ -28,11 +28,14 @@ module Axlsx
28
28
  # @see Axlsx#validate_content_type
29
29
  def ContentType=(v) Axlsx::validate_content_type v; @ContentType = v end
30
30
 
31
- # Serializes the object to xml
32
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
31
+ # Serializes the object
32
+ # @param [String] str
33
33
  # @return [String]
34
- def to_xml(xml)
35
- 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 << '/>'
36
38
  end
39
+
37
40
  end
38
41
  end
@@ -4,11 +4,11 @@ module Axlsx
4
4
  class Override
5
5
 
6
6
  # The type of content.
7
- # @return [String]
7
+ # @return [String]
8
8
  attr_reader :ContentType
9
9
 
10
10
  # The name and location of the part.
11
- # @return [String]
11
+ # @return [String]
12
12
  attr_reader :PartName
13
13
 
14
14
  #Creates a new Override object
@@ -19,20 +19,24 @@ module Axlsx
19
19
  raise ArgumentError, "PartName and ContentType are required" unless options[:PartName] && options[:ContentType]
20
20
  options.each do |o|
21
21
  self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
22
- end
22
+ end
23
23
  end
24
24
 
25
25
  # The name and location of the part.
26
26
  def PartName=(v) Axlsx::validate_string v; @PartName = v end
27
27
 
28
- # The content type.
28
+ # The content type.
29
29
  # @see Axlsx#validate_content_type
30
30
  def ContentType=(v) Axlsx::validate_content_type v; @ContentType = v end
31
31
 
32
- # Serializes the Override object to xml
33
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
34
- def to_xml(xml)
35
- 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 << '/>'
36
39
  end
40
+
37
41
  end
38
42
  end