l_axlsx 2.0.1

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 (321) hide show
  1. data/.yardopts +9 -0
  2. data/.yardopts_guide +19 -0
  3. data/CHANGELOG.md +239 -0
  4. data/LICENSE +22 -0
  5. data/README.md +259 -0
  6. data/Rakefile +30 -0
  7. data/examples/2010_comments.rb +17 -0
  8. data/examples/IMAGE1UP.JPEG +0 -0
  9. data/examples/anchor_swapping.rb +28 -0
  10. data/examples/auto_filter.rb +16 -0
  11. data/examples/basic_charts.rb +58 -0
  12. data/examples/chart_colors.rb +88 -0
  13. data/examples/colored_links.rb +59 -0
  14. data/examples/conditional_formatting/example_conditional_formatting.rb +74 -0
  15. data/examples/conditional_formatting/getting_barred.rb +37 -0
  16. data/examples/conditional_formatting/hitting_the_high_notes.rb +37 -0
  17. data/examples/conditional_formatting/scaled_colors.rb +39 -0
  18. data/examples/conditional_formatting/stop_and_go.rb +37 -0
  19. data/examples/data_validation.rb +50 -0
  20. data/examples/example.rb +828 -0
  21. data/examples/extractive.rb +45 -0
  22. data/examples/image1.jpeg +0 -0
  23. data/examples/ios_preview.rb +14 -0
  24. data/examples/merge_cells.rb +17 -0
  25. data/examples/no_grid_with_borders.rb +18 -0
  26. data/examples/page_setup.rb +11 -0
  27. data/examples/pivot_table.rb +39 -0
  28. data/examples/pivot_test.rb +63 -0
  29. data/examples/sheet_protection.rb +10 -0
  30. data/examples/skydrive/real_example.rb +63 -0
  31. data/examples/split.rb +16 -0
  32. data/examples/styles.rb +66 -0
  33. data/examples/underline.rb +13 -0
  34. data/examples/wrap_text.rb +21 -0
  35. data/lib/axlsx.rb +166 -0
  36. data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
  37. data/lib/axlsx/content_type/content_type.rb +26 -0
  38. data/lib/axlsx/content_type/default.rb +25 -0
  39. data/lib/axlsx/content_type/override.rb +25 -0
  40. data/lib/axlsx/doc_props/app.rb +235 -0
  41. data/lib/axlsx/doc_props/core.rb +39 -0
  42. data/lib/axlsx/drawing/ax_data_source.rb +26 -0
  43. data/lib/axlsx/drawing/axes.rb +61 -0
  44. data/lib/axlsx/drawing/axis.rb +190 -0
  45. data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
  46. data/lib/axlsx/drawing/bar_series.rb +82 -0
  47. data/lib/axlsx/drawing/bubble_chart.rb +59 -0
  48. data/lib/axlsx/drawing/bubble_series.rb +63 -0
  49. data/lib/axlsx/drawing/cat_axis.rb +85 -0
  50. data/lib/axlsx/drawing/chart.rb +232 -0
  51. data/lib/axlsx/drawing/d_lbls.rb +90 -0
  52. data/lib/axlsx/drawing/drawing.rb +164 -0
  53. data/lib/axlsx/drawing/graphic_frame.rb +54 -0
  54. data/lib/axlsx/drawing/hyperlink.rb +100 -0
  55. data/lib/axlsx/drawing/line_3D_chart.rb +68 -0
  56. data/lib/axlsx/drawing/line_chart.rb +99 -0
  57. data/lib/axlsx/drawing/line_series.rb +93 -0
  58. data/lib/axlsx/drawing/marker.rb +84 -0
  59. data/lib/axlsx/drawing/num_data.rb +52 -0
  60. data/lib/axlsx/drawing/num_data_source.rb +62 -0
  61. data/lib/axlsx/drawing/num_val.rb +32 -0
  62. data/lib/axlsx/drawing/one_cell_anchor.rb +98 -0
  63. data/lib/axlsx/drawing/pic.rb +204 -0
  64. data/lib/axlsx/drawing/picture_locking.rb +42 -0
  65. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -0
  66. data/lib/axlsx/drawing/pie_series.rb +74 -0
  67. data/lib/axlsx/drawing/scaling.rb +60 -0
  68. data/lib/axlsx/drawing/scatter_chart.rb +74 -0
  69. data/lib/axlsx/drawing/scatter_series.rb +65 -0
  70. data/lib/axlsx/drawing/ser_axis.rb +45 -0
  71. data/lib/axlsx/drawing/series.rb +69 -0
  72. data/lib/axlsx/drawing/series_title.rb +23 -0
  73. data/lib/axlsx/drawing/str_data.rb +42 -0
  74. data/lib/axlsx/drawing/str_val.rb +32 -0
  75. data/lib/axlsx/drawing/title.rb +78 -0
  76. data/lib/axlsx/drawing/two_cell_anchor.rb +92 -0
  77. data/lib/axlsx/drawing/val_axis.rb +37 -0
  78. data/lib/axlsx/drawing/view_3D.rb +115 -0
  79. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  80. data/lib/axlsx/drawing/vml_shape.rb +66 -0
  81. data/lib/axlsx/package.rb +363 -0
  82. data/lib/axlsx/rels/relationship.rb +129 -0
  83. data/lib/axlsx/rels/relationships.rb +29 -0
  84. data/lib/axlsx/stylesheet/border.rb +71 -0
  85. data/lib/axlsx/stylesheet/border_pr.rb +71 -0
  86. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -0
  87. data/lib/axlsx/stylesheet/cell_protection.rb +41 -0
  88. data/lib/axlsx/stylesheet/cell_style.rb +72 -0
  89. data/lib/axlsx/stylesheet/color.rb +76 -0
  90. data/lib/axlsx/stylesheet/dxf.rb +79 -0
  91. data/lib/axlsx/stylesheet/fill.rb +35 -0
  92. data/lib/axlsx/stylesheet/font.rb +148 -0
  93. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -0
  94. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -0
  95. data/lib/axlsx/stylesheet/num_fmt.rb +77 -0
  96. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -0
  97. data/lib/axlsx/stylesheet/styles.rb +420 -0
  98. data/lib/axlsx/stylesheet/table_style.rb +54 -0
  99. data/lib/axlsx/stylesheet/table_style_element.rb +77 -0
  100. data/lib/axlsx/stylesheet/table_styles.rb +46 -0
  101. data/lib/axlsx/stylesheet/xf.rb +147 -0
  102. data/lib/axlsx/util/accessors.rb +64 -0
  103. data/lib/axlsx/util/constants.rb +397 -0
  104. data/lib/axlsx/util/options_parser.rb +16 -0
  105. data/lib/axlsx/util/parser.rb +44 -0
  106. data/lib/axlsx/util/serialized_attributes.rb +89 -0
  107. data/lib/axlsx/util/simple_typed_list.rb +179 -0
  108. data/lib/axlsx/util/storage.rb +146 -0
  109. data/lib/axlsx/util/string.rb +7 -0
  110. data/lib/axlsx/util/validators.rb +307 -0
  111. data/lib/axlsx/version.rb +5 -0
  112. data/lib/axlsx/workbook/defined_name.rb +128 -0
  113. data/lib/axlsx/workbook/defined_names.rb +21 -0
  114. data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
  115. data/lib/axlsx/workbook/workbook.rb +361 -0
  116. data/lib/axlsx/workbook/workbook_view.rb +78 -0
  117. data/lib/axlsx/workbook/workbook_views.rb +22 -0
  118. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  119. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
  120. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -0
  121. data/lib/axlsx/workbook/worksheet/break.rb +35 -0
  122. data/lib/axlsx/workbook/worksheet/cell.rb +471 -0
  123. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +154 -0
  124. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -0
  125. data/lib/axlsx/workbook/worksheet/cfvos.rb +15 -0
  126. data/lib/axlsx/workbook/worksheet/col.rb +141 -0
  127. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
  128. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
  129. data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
  130. data/lib/axlsx/workbook/worksheet/comment.rb +91 -0
  131. data/lib/axlsx/workbook/worksheet/comments.rb +82 -0
  132. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
  133. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -0
  134. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  135. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -0
  136. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -0
  137. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  138. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
  139. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
  140. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -0
  141. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -0
  142. data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
  143. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -0
  144. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
  145. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -0
  146. data/lib/axlsx/workbook/worksheet/pane.rb +139 -0
  147. data/lib/axlsx/workbook/worksheet/pivot_table.rb +266 -0
  148. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
  149. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
  150. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -0
  151. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -0
  152. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
  153. data/lib/axlsx/workbook/worksheet/rich_text.rb +35 -0
  154. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +254 -0
  155. data/lib/axlsx/workbook/worksheet/row.rb +154 -0
  156. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
  157. data/lib/axlsx/workbook/worksheet/selection.rb +101 -0
  158. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
  159. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -0
  160. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
  161. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +69 -0
  162. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -0
  163. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
  164. data/lib/axlsx/workbook/worksheet/table.rb +102 -0
  165. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -0
  166. data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
  167. data/lib/axlsx/workbook/worksheet/worksheet.rb +798 -0
  168. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
  169. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
  170. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
  171. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  172. data/lib/schema/dc.xsd +118 -0
  173. data/lib/schema/dcmitype.xsd +52 -0
  174. data/lib/schema/dcterms.xsd +331 -0
  175. data/lib/schema/dml-chart.xsd +1499 -0
  176. data/lib/schema/dml-chartDrawing.xsd +146 -0
  177. data/lib/schema/dml-compatibility.xsd +14 -0
  178. data/lib/schema/dml-diagram.xsd +1091 -0
  179. data/lib/schema/dml-lockedCanvas.xsd +11 -0
  180. data/lib/schema/dml-main.xsd +3048 -0
  181. data/lib/schema/dml-picture.xsd +23 -0
  182. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
  183. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
  184. data/lib/schema/opc-contentTypes.xsd +42 -0
  185. data/lib/schema/opc-coreProperties.xsd +54 -0
  186. data/lib/schema/opc-digSig.xsd +49 -0
  187. data/lib/schema/opc-relationships.xsd +33 -0
  188. data/lib/schema/pml.xsd +1676 -0
  189. data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
  190. data/lib/schema/shared-bibliography.xsd +144 -0
  191. data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
  192. data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
  193. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
  194. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
  195. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
  196. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
  197. data/lib/schema/shared-math.xsd +582 -0
  198. data/lib/schema/shared-relationshipReference.xsd +25 -0
  199. data/lib/schema/sml.xsd +4434 -0
  200. data/lib/schema/vml-main.xsd +569 -0
  201. data/lib/schema/vml-officeDrawing.xsd +509 -0
  202. data/lib/schema/vml-presentationDrawing.xsd +12 -0
  203. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
  204. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
  205. data/lib/schema/wml.xsd +3644 -0
  206. data/lib/schema/xml.xsd +116 -0
  207. data/test/benchmark.rb +72 -0
  208. data/test/content_type/tc_content_type.rb +76 -0
  209. data/test/content_type/tc_default.rb +16 -0
  210. data/test/content_type/tc_override.rb +14 -0
  211. data/test/doc_props/tc_app.rb +43 -0
  212. data/test/doc_props/tc_core.rb +42 -0
  213. data/test/drawing/tc_axes.rb +8 -0
  214. data/test/drawing/tc_axis.rb +112 -0
  215. data/test/drawing/tc_bar_3D_chart.rb +71 -0
  216. data/test/drawing/tc_bar_series.rb +37 -0
  217. data/test/drawing/tc_bubble_chart.rb +44 -0
  218. data/test/drawing/tc_bubble_series.rb +21 -0
  219. data/test/drawing/tc_cat_axis.rb +31 -0
  220. data/test/drawing/tc_cat_axis_data.rb +27 -0
  221. data/test/drawing/tc_chart.rb +110 -0
  222. data/test/drawing/tc_d_lbls.rb +57 -0
  223. data/test/drawing/tc_data_source.rb +23 -0
  224. data/test/drawing/tc_drawing.rb +80 -0
  225. data/test/drawing/tc_graphic_frame.rb +27 -0
  226. data/test/drawing/tc_hyperlink.rb +64 -0
  227. data/test/drawing/tc_line_3d_chart.rb +47 -0
  228. data/test/drawing/tc_line_chart.rb +39 -0
  229. data/test/drawing/tc_line_series.rb +38 -0
  230. data/test/drawing/tc_marker.rb +44 -0
  231. data/test/drawing/tc_named_axis_data.rb +27 -0
  232. data/test/drawing/tc_num_data.rb +31 -0
  233. data/test/drawing/tc_num_val.rb +29 -0
  234. data/test/drawing/tc_one_cell_anchor.rb +66 -0
  235. data/test/drawing/tc_pic.rb +107 -0
  236. data/test/drawing/tc_picture_locking.rb +72 -0
  237. data/test/drawing/tc_pie_3D_chart.rb +28 -0
  238. data/test/drawing/tc_pie_series.rb +32 -0
  239. data/test/drawing/tc_scaling.rb +36 -0
  240. data/test/drawing/tc_scatter_chart.rb +48 -0
  241. data/test/drawing/tc_scatter_series.rb +21 -0
  242. data/test/drawing/tc_ser_axis.rb +31 -0
  243. data/test/drawing/tc_series.rb +23 -0
  244. data/test/drawing/tc_series_title.rb +33 -0
  245. data/test/drawing/tc_str_data.rb +18 -0
  246. data/test/drawing/tc_str_val.rb +21 -0
  247. data/test/drawing/tc_title.rb +49 -0
  248. data/test/drawing/tc_two_cell_anchor.rb +36 -0
  249. data/test/drawing/tc_val_axis.rb +24 -0
  250. data/test/drawing/tc_view_3D.rb +54 -0
  251. data/test/drawing/tc_vml_drawing.rb +25 -0
  252. data/test/drawing/tc_vml_shape.rb +106 -0
  253. data/test/profile.rb +24 -0
  254. data/test/rels/tc_relationship.rb +44 -0
  255. data/test/rels/tc_relationships.rb +37 -0
  256. data/test/stylesheet/tc_border.rb +37 -0
  257. data/test/stylesheet/tc_border_pr.rb +32 -0
  258. data/test/stylesheet/tc_cell_alignment.rb +81 -0
  259. data/test/stylesheet/tc_cell_protection.rb +29 -0
  260. data/test/stylesheet/tc_cell_style.rb +57 -0
  261. data/test/stylesheet/tc_color.rb +43 -0
  262. data/test/stylesheet/tc_dxf.rb +81 -0
  263. data/test/stylesheet/tc_fill.rb +18 -0
  264. data/test/stylesheet/tc_font.rb +121 -0
  265. data/test/stylesheet/tc_gradient_fill.rb +72 -0
  266. data/test/stylesheet/tc_gradient_stop.rb +31 -0
  267. data/test/stylesheet/tc_num_fmt.rb +30 -0
  268. data/test/stylesheet/tc_pattern_fill.rb +43 -0
  269. data/test/stylesheet/tc_styles.rb +235 -0
  270. data/test/stylesheet/tc_table_style.rb +44 -0
  271. data/test/stylesheet/tc_table_style_element.rb +45 -0
  272. data/test/stylesheet/tc_table_styles.rb +29 -0
  273. data/test/stylesheet/tc_xf.rb +120 -0
  274. data/test/tc_axlsx.rb +72 -0
  275. data/test/tc_helper.rb +10 -0
  276. data/test/tc_package.rb +233 -0
  277. data/test/util/tc_serialized_attributes.rb +19 -0
  278. data/test/util/tc_simple_typed_list.rb +77 -0
  279. data/test/util/tc_validators.rb +186 -0
  280. data/test/workbook/tc_defined_name.rb +49 -0
  281. data/test/workbook/tc_shared_strings_table.rb +44 -0
  282. data/test/workbook/tc_workbook.rb +139 -0
  283. data/test/workbook/tc_workbook_view.rb +50 -0
  284. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  285. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  286. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  287. data/test/workbook/worksheet/tc_break.rb +49 -0
  288. data/test/workbook/worksheet/tc_cell.rb +345 -0
  289. data/test/workbook/worksheet/tc_cfvo.rb +31 -0
  290. data/test/workbook/worksheet/tc_col.rb +78 -0
  291. data/test/workbook/worksheet/tc_color_scale.rb +58 -0
  292. data/test/workbook/worksheet/tc_comment.rb +72 -0
  293. data/test/workbook/worksheet/tc_comments.rb +57 -0
  294. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
  295. data/test/workbook/worksheet/tc_data_bar.rb +46 -0
  296. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  297. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
  298. data/test/workbook/worksheet/tc_header_footer.rb +151 -0
  299. data/test/workbook/worksheet/tc_icon_set.rb +45 -0
  300. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  301. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  302. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  303. data/test/workbook/worksheet/tc_pane.rb +54 -0
  304. data/test/workbook/worksheet/tc_pivot_table.rb +120 -0
  305. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
  306. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  307. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  308. data/test/workbook/worksheet/tc_rich_text.rb +44 -0
  309. data/test/workbook/worksheet/tc_rich_text_run.rb +172 -0
  310. data/test/workbook/worksheet/tc_row.rb +117 -0
  311. data/test/workbook/worksheet/tc_selection.rb +55 -0
  312. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  313. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
  314. data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
  315. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  316. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  317. data/test/workbook/worksheet/tc_table.rb +68 -0
  318. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  319. data/test/workbook/worksheet/tc_worksheet.rb +563 -0
  320. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
  321. metadata +583 -0
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env ruby -w -s
2
+ # -*- coding: utf-8 -*-
3
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
4
+ require 'axlsx'
5
+ p = Axlsx::Package.new
6
+ p.workbook do |wb|
7
+ # define your regular styles
8
+ styles = wb.styles
9
+ title = styles.add_style :sz => 15, :b => true, :u => true
10
+ default = styles.add_style :border => Axlsx::STYLE_THIN_BORDER
11
+ header = styles.add_style :bg_color => '00', :fg_color => 'FF', :b => true
12
+ money = styles.add_style :format_code => '#,###,##0', :border => Axlsx::STYLE_THIN_BORDER
13
+ percent = styles.add_style :num_fmt => Axlsx::NUM_FMT_PERCENT, :border => Axlsx::STYLE_THIN_BORDER
14
+
15
+ # define the style for conditional formatting - its the :dxf bit that counts!
16
+ profitable = styles.add_style :fg_color => 'FF428751', :sz => 12, :type => :dxf, :b => true
17
+
18
+ wb.add_worksheet(:name => 'Scaled Colors') do |ws|
19
+ ws.add_row ['A$$le Q1 Revenue Historical Analysis (USD)'], :style => title
20
+ ws.add_row
21
+ ws.add_row ['Quarter', 'Profit', '% of Total'], :style => header
22
+ ws.add_row ['Q1-2010', '15680000000', '=B4/SUM(B4:B7)'], :style => [default, money, percent]
23
+ ws.add_row ['Q1-2011', '26740000000', '=B5/SUM(B4:B7)'], :style => [default, money, percent]
24
+ ws.add_row ['Q1-2012', '46330000000', '=B6/SUM(B4:B7)'], :style => [default, money, percent]
25
+ ws.add_row ['Q1-2013(est)', '72230000000', '=B7/SUM(B4:B7)'], :style => [default, money, percent]
26
+
27
+ ws.merge_cells 'A1:C1'
28
+
29
+ # Apply conditional formatting to range B4:B7 in the worksheet
30
+ color_scale = Axlsx::ColorScale.new
31
+ ws.add_conditional_formatting 'B4:B7', { :type => :colorScale,
32
+ :operator => :greaterThan,
33
+ :formula => '27000000000',
34
+ :dxfId => profitable,
35
+ :priority => 1,
36
+ :color_scale => color_scale }
37
+ end
38
+ end
39
+ p.serialize 'scaled_colors.xlsx'
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby -w -s
2
+ # -*- coding: utf-8 -*-
3
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
4
+ require 'axlsx'
5
+ p = Axlsx::Package.new
6
+ p.workbook do |wb|
7
+ # define your regular styles
8
+ styles = wb.styles
9
+ title = styles.add_style :sz => 15, :b => true, :u => true
10
+ default = styles.add_style :border => Axlsx::STYLE_THIN_BORDER
11
+ header = styles.add_style :bg_color => '00', :fg_color => 'FF', :b => true
12
+ money = styles.add_style :format_code => '#,###,##0', :border => Axlsx::STYLE_THIN_BORDER
13
+ percent = styles.add_style :num_fmt => Axlsx::NUM_FMT_PERCENT, :border => Axlsx::STYLE_THIN_BORDER
14
+
15
+ # define the style for conditional formatting - its the :dxf bit that counts!
16
+ profitable = styles.add_style :fg_color => 'FF428751', :sz => 12, :type => :dxf, :b => true
17
+
18
+ wb.add_worksheet(:name => 'Downtown traffic') do |ws|
19
+ ws.add_row ['A$$le Q1 Revenue Historical Analysis (USD)'], :style => title
20
+ ws.add_row
21
+ ws.add_row ['Quarter', 'Profit', '% of Total'], :style => header
22
+ ws.add_row ['Q1-2010', '15680000000', '=B4/SUM(B4:B7)'], :style => [default, money, percent]
23
+ ws.add_row ['Q1-2011', '26740000000', '=B5/SUM(B4:B7)'], :style => [default, money, percent]
24
+ ws.add_row ['Q1-2012', '46330000000', '=B6/SUM(B4:B7)'], :style => [default, money, percent]
25
+ ws.add_row ['Q1-2013(est)', '72230000000', '=B7/SUM(B4:B7)'], :style => [default, money, percent]
26
+
27
+ ws.merge_cells 'A1:C1'
28
+
29
+ # Apply conditional formatting to range B3:B7 in the worksheet
30
+ icon_set = Axlsx::IconSet.new
31
+ ws.add_conditional_formatting 'B3:B7', { :type => :iconSet,
32
+ :dxfId => profitable,
33
+ :priority => 1,
34
+ :icon_set => icon_set }
35
+ end
36
+ end
37
+ p.serialize 'stop_and_go.xlsx'
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby -w -s
2
+ # -*- coding: utf-8 -*-
3
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
4
+ require 'axlsx'
5
+
6
+ p = Axlsx::Package.new
7
+ p.workbook.add_worksheet do |ws|
8
+ ws.add_data_validation("A10", {
9
+ :type => :whole,
10
+ :operator => :between,
11
+ :formula1 => '5',
12
+ :formula2 => '10',
13
+ :showErrorMessage => true,
14
+ :errorTitle => 'Wrong input',
15
+ :error => 'Only values between 5 and 10',
16
+ :errorStyle => :information,
17
+ :showInputMessage => true,
18
+ :promptTitle => 'Be carful!',
19
+ :prompt => 'Only values between 5 and 10'})
20
+
21
+ ws.add_data_validation("B10", {
22
+ :type => :textLength,
23
+ :operator => :greaterThan,
24
+ :formula1 => '10',
25
+ :showErrorMessage => true,
26
+ :errorTitle => 'Text is too long',
27
+ :error => 'Max text length is 10 characters',
28
+ :errorStyle => :stop,
29
+ :showInputMessage => true,
30
+ :promptTitle => 'Text length',
31
+ :prompt => 'Max text length is 10 characters'})
32
+
33
+ 8.times do |i|
34
+ ws.add_row [nil, nil, i*2]
35
+ end
36
+
37
+ ws.add_data_validation("C10", {
38
+ :type => :list,
39
+ :formula1 => 'C1:C8',
40
+ :showDropDown => false,
41
+ :showErrorMessage => true,
42
+ :errorTitle => '',
43
+ :error => 'Only values from C1:C8',
44
+ :errorStyle => :stop,
45
+ :showInputMessage => true,
46
+ :promptTitle => '',
47
+ :prompt => 'Only values from C1:C8'})
48
+ end
49
+
50
+ p.serialize 'data_validation.xlsx'
@@ -0,0 +1,828 @@
1
+ #!/usr/bin/env ruby -w -s
2
+ # -*- coding: utf-8 -*-
3
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
4
+
5
+ #```ruby
6
+ require 'axlsx'
7
+ examples = []
8
+ examples << :basic
9
+ examples << :custom_styles
10
+ examples << :wrap_text
11
+ examples << :cell_style_override
12
+ examples << :custom_borders
13
+ examples << :surrounding_border
14
+ examples << :deep_custom_borders
15
+ examples << :row_column_style
16
+ examples << :fixed_column_width
17
+ examples << :outline_level
18
+ examples << :merge_cells
19
+ examples << :images
20
+ examples << :format_dates
21
+ examples << :mbcs
22
+ examples << :formula
23
+ examples << :auto_filter
24
+ examples << :data_types
25
+ examples << :override_data_types
26
+ examples << :hyperlinks
27
+ examples << :number_currency_format
28
+ examples << :venezuela_currency
29
+ examples << :bar_chart
30
+ examples << :chart_gridlines
31
+ examples << :pie_chart
32
+ examples << :line_chart
33
+ examples << :scatter_chart
34
+ examples << :tables
35
+ examples << :fit_to_page
36
+ examples << :hide_gridlines
37
+ examples << :repeated_header
38
+ examples << :defined_name
39
+ examples << :printing
40
+ examples << :header_footer
41
+ examples << :comments
42
+ examples << :panes
43
+ examples << :book_view
44
+ examples << :sheet_view
45
+ examples << :hiding_sheets
46
+ examples << :conditional_formatting
47
+ examples << :streaming
48
+ examples << :shared_strings
49
+ examples << :no_autowidth
50
+ examples << :cached_formula
51
+ examples << :page_breaks
52
+ examples << :rich_text
53
+
54
+ p = Axlsx::Package.new
55
+ wb = p.workbook
56
+ #```
57
+
58
+ ## A Simple Workbook
59
+
60
+ #```ruby
61
+ if examples.include? :basic
62
+ wb.add_worksheet(:name => "Basic Worksheet") do |sheet|
63
+ sheet.add_row ["First Column", "Second", "Third"]
64
+ sheet.add_row [1, 2, 3]
65
+ sheet.add_row [' preserving whitespace']
66
+ end
67
+ end
68
+ #```
69
+
70
+ #Using Custom Styles
71
+
72
+ #```ruby
73
+ # Each cell allows a single, predified style.
74
+ # When using add_row, the value in the :style array at the same index as the cell's column will be applied to that cell.
75
+ # Alternatively, you can apply a style to an entire row by using an integer value for :style.
76
+ if examples.include? :custom_styles
77
+ wb.styles do |s|
78
+ black_cell = s.add_style :bg_color => "00", :fg_color => "FF", :sz => 14, :alignment => { :horizontal=> :center }
79
+ blue_cell = s.add_style :bg_color => "0000FF", :fg_color => "FF", :sz => 20, :alignment => { :horizontal=> :center }
80
+ wb.add_worksheet(:name => "Custom Styles") do |sheet|
81
+
82
+ # Applies the black_cell style to the first and third cell, and the blue_cell style to the second.
83
+ sheet.add_row ["Text Autowidth", "Second", "Third"], :style => [black_cell, blue_cell, black_cell]
84
+
85
+ # Applies the thin border to all three cells
86
+ sheet.add_row [1, 2, 3], :style => Axlsx::STYLE_THIN_BORDER
87
+ end
88
+ end
89
+ end
90
+
91
+
92
+ #```ruby
93
+ # A simple example of wrapping text. Seems this may not be working in Libre Office so here is an example for me to play with.
94
+ if examples.include? :wrap_text
95
+ wb.styles do |s|
96
+ wrap_text = s.add_style :fg_color=> "FFFFFF",
97
+ :b => true,
98
+ :bg_color => "004586",
99
+ :sz => 12,
100
+ :border => { :style => :thin, :color => "00" },
101
+ :alignment => { :horizontal => :center,
102
+ :vertical => :center ,
103
+ :wrap_text => true}
104
+ wb.add_worksheet(:name => 'wrap text') do |sheet|
105
+ sheet.add_row ['Torp, White and Cronin'], :style=>wrap_text
106
+ sheet.column_info.first.width = 5
107
+ end
108
+ end
109
+ end
110
+
111
+ ##Styling Cell Overrides
112
+
113
+ #```ruby
114
+ #Some of the style attributes can also be set at the cell level. Cell level styles take precedence over Custom Styles shown in the previous example.
115
+ if examples.include? :cell_style_override
116
+ wb.add_worksheet(:name => "Cell Level Style Overrides") do |sheet|
117
+
118
+ # this will set the font size for each cell.
119
+ sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4'], :sz => 16
120
+
121
+ sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
122
+ sheet.add_row %w(u shadow sz b i strike outline)
123
+ sheet.rows.last.cells[0].u = :double
124
+ sheet.rows.last.cells[1].shadow = true
125
+ sheet.rows.last.cells[2].sz = 20
126
+ sheet.rows.last.cells[3].b = true
127
+ sheet.rows.last.cells[4].i = true
128
+ sheet.rows.last.cells[5].strike = true
129
+ sheet.rows.last.cells[6].outline = 1
130
+ # You can also apply cell style overrides to a range of cells
131
+ sheet["A1:D1"].each { |c| c.color = "FF0000" }
132
+ sheet['A1:D2'].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
133
+ end
134
+ end
135
+ ##```
136
+
137
+ ##Using Custom Border Styles
138
+
139
+ #```ruby
140
+ #Axlsx defines a thin border style, but you can easily create and use your own.
141
+ if examples.include? :custom_borders
142
+ wb.styles do |s|
143
+ red_border = s.add_style :border => { :style => :thick, :color =>"FFFF0000", :edges => [:left, :right] }
144
+ blue_border = s.add_style :border => { :style => :thick, :color =>"FF0000FF"}
145
+
146
+ wb.add_worksheet(:name => "Custom Borders") do |sheet|
147
+ sheet.add_row ["wrap", "me", "Up in Red"], :style => red_border
148
+ sheet.add_row [1, 2, 3], :style => blue_border
149
+ end
150
+ end
151
+ end
152
+
153
+ #```ruby
154
+ # More Custom Borders
155
+ if examples.include? :surrounding_border
156
+
157
+ # Stuff like this is why I LOVE RUBY
158
+ # If you dont know about hash default values
159
+ # LEARN IT! LIVE IT! LOVE IT!
160
+ defaults = { :style => :thick, :color => "000000" }
161
+ borders = Hash.new do |hash, key|
162
+ hash[key] = wb.styles.add_style :border => defaults.merge( { :edges => key.to_s.split('_').map(&:to_sym) } )
163
+ end
164
+ top_row = [0, borders[:top_left], borders[:top], borders[:top], borders[:top_right]]
165
+ middle_row = [0, borders[:left], nil, nil, borders[:right]]
166
+ bottom_row = [0, borders[:bottom_left], borders[:bottom], borders[:bottom], borders[:bottom_right]]
167
+
168
+ wb.add_worksheet(:name => "Surrounding Border") do |ws|
169
+ ws.add_row []
170
+ ws.add_row ['', 1,2,3,4], :style => top_row
171
+ ws.add_row ['', 5,6,7,8], :style => middle_row
172
+ ws.add_row ['', 9, 10, 11, 12]
173
+
174
+ #This works too!
175
+ ws.rows.last.style = bottom_row
176
+
177
+ end
178
+ end
179
+
180
+ #```ruby
181
+ # Hacking border styles
182
+ if examples.include? :deep_custom_borders
183
+ wb.styles do |s|
184
+ top_bottom = s.add_style :border => { :style => :thick, :color =>"FFFF0000", :edges => [:top, :bottom] }
185
+ border = s.borders[s.cellXfs[top_bottom].borderId]
186
+ # edit existing border parts
187
+ border.prs.each do |part|
188
+ case part.name
189
+ when :top
190
+ part.color = Axlsx::Color.new(:rgb => "FFFF0000")
191
+ when :bottom
192
+ part.color = Axlsx::Color.new(:rgb => "FF00FF00")
193
+ end
194
+ end
195
+
196
+ border.prs << Axlsx::BorderPr.new(:name => :left, :color => Axlsx::Color.new(:rgb => '0000FF'), :style => :mediumDashed)
197
+ wb.add_worksheet(:name => 'hacked borders') do |sheet|
198
+ sheet.add_row [1,2,3], :style=>top_bottom
199
+ end
200
+ end
201
+ end
202
+ ##```
203
+
204
+
205
+ ##Styling Rows and Columns
206
+
207
+ #```ruby
208
+ if examples.include? :row_column_style
209
+ wb.styles do |s|
210
+ head = s.add_style :bg_color => "00", :fg_color => "FF"
211
+ percent = s.add_style :num_fmt => 9
212
+ wb.add_worksheet(:name => "Columns and Rows") do |sheet|
213
+ sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4', 'col5']
214
+ sheet.add_row [1, 2, 0.3, 4, 5.0]
215
+ sheet.add_row [1, 2, 0.2, 4, 5.0]
216
+ sheet.add_row [1, 2, 0.1, 4, 5.0]
217
+
218
+ #apply the percent style to the column at index 2 skipping the first row.
219
+ sheet.col_style 2, percent, :row_offset => 1
220
+
221
+ # apply the head style to the first row.
222
+ sheet.row_style 0, head
223
+
224
+ #Hide the 5th column
225
+ sheet.column_info[4].hidden = true
226
+
227
+ #Set the second column outline level
228
+ sheet.column_info[1].outlineLevel = 2
229
+
230
+ sheet.rows[3].hidden = true
231
+ sheet.rows[1].outlineLevel = 2
232
+ end
233
+ end
234
+ end
235
+ ##```
236
+
237
+
238
+ ##Specifying Column Widths
239
+
240
+ #```ruby
241
+ if examples.include? :fixed_column_width
242
+ wb.add_worksheet(:name => "custom column widths") do |sheet|
243
+ sheet.add_row ["I use autowidth and am very wide", "I use a custom width and am narrow"]
244
+ sheet.add_row ['abcdefg', 'This is a very long text and should flow into the right cell', nil, 'xxx' ]
245
+ sheet.column_widths nil, 3, 5, nil
246
+ end
247
+ end
248
+
249
+ #```ruby
250
+ if examples.include? :outline_level
251
+ wb.add_worksheet(name: 'outline_level') do |sheet|
252
+ sheet.add_row [1, 2, 3, Time.now, 5, 149455.15]
253
+ sheet.add_row [1, 2, 5, 6, 5,14100.19]
254
+ sheet.add_row [9500002267, 1212, 1212, 5,14100.19]
255
+ sheet.outline_level_rows 0, 2
256
+ sheet.outline_level_columns 0, 2
257
+ end
258
+ end
259
+ ##```
260
+
261
+ ##Merging Cells.
262
+
263
+ #```ruby
264
+ if examples.include? :merge_cells
265
+ wb.add_worksheet(:name => 'Merging Cells') do |sheet|
266
+ # cell level style overides when adding cells
267
+ sheet.add_row ["col 1", "col 2", "col 3", "col 4"], :sz => 16
268
+ sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
269
+ sheet.add_row [2, 3, 4, "=SUM(A3:C3)"]
270
+ sheet.add_row ["total", "", "", "=SUM(D2:D3)"]
271
+ sheet.merge_cells("A4:C4")
272
+ sheet["A1:D1"].each { |c| c.color = "FF0000"}
273
+ sheet["A1:D4"].each { |c| c.style = Axlsx::STYLE_THIN_BORDER }
274
+ end
275
+ end
276
+ ##```
277
+
278
+ ##Add an Image with a hyperlink
279
+
280
+ #```ruby
281
+ if examples.include? :images
282
+ wb.add_worksheet(:name => "Image with Hyperlink") do |sheet|
283
+ img = File.expand_path('../image1.jpeg', __FILE__)
284
+ # specifying the :hyperlink option will add a hyper link to your image.
285
+ #
286
+ # @note - Numbers does not support this part of the specification.
287
+
288
+ sheet.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
289
+ image.width=720
290
+ image.height=666
291
+ image.hyperlink.tooltip = "Labeled Link"
292
+ image.start_at 0, 0
293
+ end
294
+
295
+ # position in block
296
+ sheet.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
297
+ image.start_at 22, 14
298
+ image.end_at 23, 17
299
+ end
300
+ # all in one go
301
+ sheet.add_image(:image_src => img, :start_at => [15, 33], :end_at => [20, 37], :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com")
302
+ end
303
+ end
304
+ #```
305
+
306
+ ##Using Custom Formatting and date1904
307
+
308
+ #```ruby
309
+ if examples.include? :format_dates
310
+ require 'date'
311
+ wb.styles do |s|
312
+ date = s.add_style(:format_code => "yyyy-mm-dd", :border => Axlsx::STYLE_THIN_BORDER)
313
+ padded = s.add_style(:format_code => "00#", :border => Axlsx::STYLE_THIN_BORDER)
314
+ percent = s.add_style(:format_code => "0000%", :border => Axlsx::STYLE_THIN_BORDER)
315
+ # wb.date1904 = true # Use the 1904 date system (Used by Excel for Mac < 2011)
316
+ wb.add_worksheet(:name => "Formatting Data") do |sheet|
317
+ sheet.add_row ["Custom Formatted Date", "Percent Formatted Float", "Padded Numbers"], :style => Axlsx::STYLE_THIN_BORDER
318
+ sheet.add_row [Date::strptime('2012-01-19','%Y-%m-%d'), 0.2, 32], :style => [date, percent, padded]
319
+ end
320
+ end
321
+ end
322
+ #```
323
+
324
+ ##Asian Language Support
325
+
326
+ #```ruby
327
+ if examples.include? :mbcs
328
+ wb.styles.fonts.first.name = 'Arial Unicode MS'
329
+ wb.add_worksheet(:name => "日本語でのシート名") do |sheet|
330
+ sheet.add_row ["日本語"]
331
+ sheet.add_row ["华语/華語"]
332
+ sheet.add_row ["한국어/조선말"]
333
+ end
334
+ end
335
+ ##```
336
+
337
+ ##Using formula
338
+
339
+ #```ruby
340
+ if examples.include? :formula
341
+ wb.add_worksheet(:name => "Using Formulas") do |sheet|
342
+ sheet.add_row ['col 1', 'col 2', 'col 3', 'col 4']
343
+ sheet.add_row [1, 2, 3, "=SUM(A2:C2)"]
344
+ end
345
+ end
346
+ ##```
347
+
348
+ ##Auto Filter
349
+
350
+ #```ruby
351
+ if examples.include? :auto_filter
352
+ wb.add_worksheet(:name => "Auto Filter") do |sheet|
353
+ sheet.add_row ["Build Matrix"]
354
+ sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
355
+ sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
356
+ sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
357
+ sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
358
+ sheet.auto_filter = "A2:D5"
359
+ sheet.auto_filter.add_column 3, :filters, :filter_items => ['1.9.2', '1.8.7']
360
+ end
361
+ end
362
+ #```
363
+
364
+ ##Automatic cell types
365
+
366
+
367
+ #```ruby
368
+ if examples.include? :data_types
369
+ wb.add_worksheet(:name => "Automatic cell types") do |sheet|
370
+ date_format = wb.styles.add_style :format_code => 'YYYY-MM-DD'
371
+ time_format = wb.styles.add_style :format_code => 'hh:mm:ss'
372
+ sheet.add_row ["Date", "Time", "String", "Boolean", "Float", "Integer"]
373
+ sheet.add_row [Date.today, Time.now, "value", true, 0.1, 1], :style => [date_format, time_format]
374
+ end
375
+ end
376
+
377
+ #```ruby
378
+ if examples.include? :override_data_types
379
+ wb.add_worksheet(:name => "Override Data Type") do |sheet|
380
+ sheet.add_row ['dont eat my zeros!', '0088'] , :types => [nil, :string]
381
+ end
382
+ end
383
+ # Hyperlinks in worksheet
384
+ if examples.include? :hyperlinks
385
+ wb.add_worksheet(:name => 'hyperlinks') do |sheet|
386
+ # external references
387
+ sheet.add_row ['axlsx']
388
+ sheet.add_hyperlink :location => 'https://github.com/randym/axlsx', :ref => sheet.rows.first.cells.first
389
+ # internal references
390
+ sheet.add_hyperlink :location => "'Next Sheet'!A1", :ref => 'A2', :target => :sheet
391
+ sheet.add_row ['next sheet']
392
+ end
393
+
394
+ wb.add_worksheet(:name => 'Next Sheet') do |sheet|
395
+ sheet.add_row ['hello!']
396
+ end
397
+ end
398
+ ###```
399
+
400
+ ##Number formatting and currency
401
+ if examples.include? :number_currency_format
402
+ wb.add_worksheet(:name => "Formats and Currency") do |sheet|
403
+ currency = wb.styles.add_style :num_fmt => 5
404
+ red_negative = wb.styles.add_style :num_fmt => 8
405
+ comma = wb.styles.add_style :num_fmt => 3
406
+ super_funk = wb.styles.add_style :format_code => '[Green]#'
407
+ sheet.add_row %w(Currency RedNegative Comma Custom)
408
+ sheet.add_row [1500, -122.34, 123456789, 594829], :style=> [currency, red_negative, comma, super_funk]
409
+ end
410
+ end
411
+
412
+ ## Venezuala currency
413
+ if examples.include? :venezuela_currency
414
+ wb.add_worksheet(:name => 'Venezuala_currency') do |sheet|
415
+ number = wb.styles.add_style :format_code => '#.##0\,00'
416
+ sheet.add_row [2.5] , :style => [number]
417
+ end
418
+ end
419
+
420
+ ##Generating A Bar Chart
421
+
422
+ #```ruby
423
+ if examples.include? :bar_chart
424
+ wb.add_worksheet(:name => "Bar Chart") do |sheet|
425
+ sheet.add_row ["A Simple Bar Chart"]
426
+ %w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
427
+ sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A6", :end_at => "F20") do |chart|
428
+ chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"], :title => sheet["A1"], :colors => ["00FF00", "0000FF"]
429
+ end
430
+ end
431
+ end
432
+
433
+ ##```
434
+
435
+ ##Hide Gridlines in chart
436
+
437
+ #```ruby
438
+ if examples.include? :chart_gridlines
439
+ wb.add_worksheet(:name => "Chart With No Gridlines") do |sheet|
440
+ sheet.add_row ["Bar Chart without gridlines"]
441
+ %w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
442
+ sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A6", :end_at => "F20") do |chart|
443
+ chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"], :colors => ["00FF00", "FF0000"]
444
+ chart.valAxis.gridlines = false
445
+ chart.catAxis.gridlines = false
446
+ end
447
+ end
448
+ end
449
+ #```
450
+
451
+ ##Generating A Pie Chart
452
+
453
+ #```ruby
454
+ if examples.include? :pie_chart
455
+ wb.add_worksheet(:name => "Pie Chart") do |sheet|
456
+ sheet.add_row ["Simple Pie Chart"]
457
+ %w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
458
+ sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,5], :end_at => [10, 20], :title => "example 3: Pie Chart") do |chart|
459
+ chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"], :colors => ['FF0000', '00FF00', '0000FF']
460
+ end
461
+ end
462
+ end
463
+ #```
464
+
465
+ ##Generating A Line Chart
466
+
467
+ #```ruby
468
+ if examples.include? :line_chart
469
+ wb.add_worksheet(:name => "Line Chart") do |sheet|
470
+ sheet.add_row ["Simple Line Chart"]
471
+ sheet.add_row %w(first second)
472
+ 4.times do
473
+ sheet.add_row [ rand(24)+1, rand(24)+1]
474
+ end
475
+ sheet.add_chart(Axlsx::Line3DChart, :title => "Simple 3D Line Chart", :rotX => 30, :rotY => 20) do |chart|
476
+ chart.start_at 0, 5
477
+ chart.end_at 10, 20
478
+ chart.add_series :data => sheet["A3:A6"], :title => sheet["A2"], :color => "0000FF"
479
+ chart.add_series :data => sheet["B3:B6"], :title => sheet["B2"], :color => "FF0000"
480
+ chart.catAxis.title = 'X Axis'
481
+ chart.valAxis.title = 'Y Axis'
482
+ end
483
+ sheet.add_chart(Axlsx::LineChart, :title => "Simple Line Chart", :rotX => 30, :rotY => 20) do |chart|
484
+ chart.start_at 0, 21
485
+ chart.end_at 10, 41
486
+ chart.add_series :data => sheet["A3:A6"], :title => sheet["A2"], :color => "FF0000", :show_marker => true, :smooth => true
487
+ chart.add_series :data => sheet["B3:B6"], :title => sheet["B2"], :color => "00FF00"
488
+ chart.catAxis.title = 'X Axis'
489
+ chart.valAxis.title = 'Y Axis'
490
+ end
491
+
492
+ end
493
+ end
494
+ #```
495
+
496
+ ##Generating A Scatter Chart
497
+
498
+ #```ruby
499
+ if examples.include? :scatter_chart
500
+ wb.add_worksheet(:name => "Scatter Chart") do |sheet|
501
+ sheet.add_row ["First", 1, 5, 7, 9]
502
+ sheet.add_row ["", 1, 25, 49, 81]
503
+ sheet.add_row ["Second", 5, 2, 14, 9]
504
+ sheet.add_row ["", 5, 10, 15, 20]
505
+ sheet.add_chart(Axlsx::ScatterChart, :title => "example 7: Scatter Chart") do |chart|
506
+ chart.start_at 0, 4
507
+ chart.end_at 10, 19
508
+ chart.add_series :xData => sheet["B1:E1"], :yData => sheet["B2:E2"], :title => sheet["A1"], :color => "FF0000"
509
+ chart.add_series :xData => sheet["B3:E3"], :yData => sheet["B4:E4"], :title => sheet["A3"], :color => "00FF00"
510
+ end
511
+ end
512
+ end
513
+ #```
514
+
515
+
516
+ ##Tables
517
+
518
+ #```ruby
519
+ if examples.include? :tables
520
+ wb.add_worksheet(:name => "Table") do |sheet|
521
+ sheet.add_row ["Build Matrix"]
522
+ sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
523
+ sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
524
+ sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
525
+ sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
526
+ sheet.add_table "A2:D5", :name => 'Build Matrix', :style_info => { :name => "TableStyleMedium23" }
527
+ end
528
+ end
529
+ #```
530
+
531
+
532
+ ##Fit to page printing
533
+
534
+ #```ruby
535
+ if examples.include? :fit_to_page
536
+ wb.add_worksheet(:name => "fit to page") do |sheet|
537
+ sheet.add_row ['this all goes on one page']
538
+ sheet.page_setup.fit_to :width => 1, :height => 1
539
+ end
540
+ end
541
+ ##```
542
+
543
+
544
+ ##Hide Gridlines in worksheet
545
+
546
+ #```ruby
547
+ if examples.include? :hide_gridlines
548
+ wb.add_worksheet(:name => "No Gridlines") do |sheet|
549
+ sheet.add_row ["This", "Sheet", "Hides", "Gridlines"]
550
+ sheet.sheet_view.show_grid_lines = false
551
+ end
552
+ end
553
+ ##```
554
+
555
+ # Repeat printing of header rows.
556
+ #```ruby
557
+ if examples.include? :repeated_header
558
+ wb.add_worksheet(:name => "repeated header") do |sheet|
559
+ sheet.add_row %w(These Column Header Will Render On Every Printed Sheet)
560
+ 200.times { sheet.add_row %w(1 2 3 4 5 6 7 8) }
561
+ wb.add_defined_name("'repeated header'!$1:$1", :local_sheet_id => sheet.index, :name => '_xlnm.Print_Titles')
562
+ end
563
+ end
564
+
565
+ # Defined Names in formula
566
+ if examples.include? :defined_name
567
+ wb.add_worksheet(:name => 'defined name') do |sheet|
568
+ sheet.add_row [1, 2, 17, '=FOOBAR']
569
+ wb.add_defined_name("'defined name'!$C1", :local_sheet_id => sheet.index, :name => 'FOOBAR')
570
+ end
571
+ end
572
+
573
+ # Sheet Protection and excluding cells from locking.
574
+ if examples.include? :sheet_protection
575
+ unlocked = wb.styles.add_style :locked => false
576
+ wb.add_worksheet(:name => 'Sheet Protection') do |sheet|
577
+ sheet.sheet_protection.password = 'fish'
578
+ sheet.add_row [1, 2 ,3] # These cells will be locked
579
+ sheet.add_row [4, 5, 6], :style => unlocked # these cells will not!
580
+ end
581
+ end
582
+
583
+ ##Specify page margins and other options for printing
584
+
585
+ #```ruby
586
+ if examples.include? :printing
587
+ margins = {:left => 3, :right => 3, :top => 1.2, :bottom => 1.2, :header => 0.7, :footer => 0.7}
588
+ setup = {:fit_to_width => 1, :orientation => :landscape, :paper_width => "297mm", :paper_height => "210mm"}
589
+ options = {:grid_lines => true, :headings => true, :horizontal_centered => true}
590
+ wb.add_worksheet(:name => "print margins", :page_margins => margins, :page_setup => setup, :print_options => options) do |sheet|
591
+ sheet.add_row ["this sheet uses customized print settings"]
592
+ end
593
+ end
594
+ #```
595
+
596
+ ## Add headers and footers to a worksheet
597
+ #``` ruby
598
+ if examples.include? :header_footer
599
+ header_footer = {:different_first => false, :odd_header => '&L&F : &A&R&D &T', :odd_footer => '&C&Pof&N'}
600
+ wb.add_worksheet(:name => "header footer", :header_footer => header_footer) do |sheet|
601
+ sheet.add_row ["this sheet has a header and a footer"]
602
+ end
603
+ end
604
+ #```
605
+
606
+ ## Add Comments to your spreadsheet
607
+ #``` ruby
608
+ if examples.include? :comments
609
+ wb.add_worksheet(:name => 'comments') do |sheet|
610
+ sheet.add_row ['Can we build it?']
611
+ sheet.add_comment :ref => 'A1', :author => 'Bob', :text => 'Yes We Can!'
612
+ sheet.add_comment :ref => 'A2', :author => 'Bob', :text => 'Yes We Can! - but I dont think you need to know about it!', :visible => false
613
+
614
+ end
615
+ end
616
+
617
+ ## Frozen/Split panes
618
+ ## ``` ruby
619
+ if examples.include? :panes
620
+ wb.add_worksheet(:name => 'panes') do |sheet|
621
+ sheet.add_row(['', (0..99).map { |i| "column header #{i}" }].flatten )
622
+ 100.times.with_index { |index| sheet << ["row header", (0..index).to_a].flatten }
623
+ sheet.sheet_view.pane do |pane|
624
+ pane.top_left_cell = "B2"
625
+ pane.state = :frozen_split
626
+ pane.y_split = 1
627
+ pane.x_split = 1
628
+ pane.active_pane = :bottom_right
629
+ end
630
+ end
631
+ end
632
+
633
+ if examples.include? :sheet_view
634
+ ws = wb.add_worksheet(:name => 'SheetView - Split')
635
+ ws.sheet_view do |vs|
636
+ vs.pane do |pane|
637
+ pane.active_pane = :top_right
638
+ pane.state = :split
639
+ pane.x_split = 11080
640
+ pane.y_split = 5000
641
+ pane.top_left_cell = 'C44'
642
+ end
643
+
644
+ vs.add_selection(:top_left, { :active_cell => 'A2', :sqref => 'A2' })
645
+ vs.add_selection(:top_right, { :active_cell => 'I10', :sqref => 'I10' })
646
+ vs.add_selection(:bottom_left, { :active_cell => 'E55', :sqref => 'E55' })
647
+ vs.add_selection(:bottom_right, { :active_cell => 'I57', :sqref => 'I57' })
648
+ end
649
+
650
+ ws = wb.add_worksheet :name => "Sheetview - Frozen"
651
+ ws.sheet_view do |vs|
652
+ vs.pane do |pane|
653
+ pane.state = :frozen
654
+ pane.x_split = 3
655
+ pane.y_split = 4
656
+ end
657
+ end
658
+ end
659
+
660
+ ## Book Views
661
+ #
662
+ ## Book views let you specify which sheet the show as active when the user opens the work book as well as a bunch of other
663
+ ## tuning values for the UI @see Axlsx::WorkbookView
664
+ ## ```ruby
665
+ if examples.include? :book_view
666
+ # when you open example.xml the second sheet is selected, and the horizontal scroll bar is much smaller showing more sheets
667
+ wb.add_view tab_ratio: 800, active_tab: 1
668
+ end
669
+
670
+ ## Hiding Sheets
671
+ ##
672
+ ## Sheets can be hidden with the state attribute
673
+ if examples.include? :hiding_sheets
674
+ wb.add_worksheet name: 'hidden', state: :hidden do |sheet|
675
+ sheet.add_row ['you cant see me!']
676
+ end
677
+ wb.add_worksheet name: 'very hidden', state: :very_hidden do |sheet|
678
+ sheet.add_row ['you really cant see me!']
679
+ end
680
+ end
681
+ # conditional formatting
682
+ #
683
+ if examples.include? :conditional_formatting
684
+ percent = wb.styles.add_style(:format_code => "0.00%", :border => Axlsx::STYLE_THIN_BORDER)
685
+ money = wb.styles.add_style(:format_code => '0,000', :border => Axlsx::STYLE_THIN_BORDER)
686
+
687
+ # define the style for conditional formatting
688
+ profitable = wb.styles.add_style( :fg_color => "FF428751", :type => :dxf )
689
+ unprofitable = wb.styles.add_style( :fg_color => "FF0000", :type => :dxf )
690
+
691
+ wb.add_worksheet(:name => "Conditional Cell Is") do |sheet|
692
+
693
+ # Generate 20 rosheet of data
694
+ sheet.add_row ["Previous Year Quarterly Profits (JPY)"]
695
+ sheet.add_row ["Quarter", "Profit", "% of Total"]
696
+ offset = 3
697
+ rosheet = 20
698
+ offset.upto(rosheet + offset) do |i|
699
+ sheet.add_row ["Q#{i}", 10000*((rosheet/2-i) * (rosheet/2-i)), "=100*B#{i}/SUM(B3:B#{rosheet+offset})"], :style=>[nil, money, percent]
700
+ end
701
+
702
+ # Apply conditional formatting to range B3:B100 in the worksheet
703
+ sheet.add_conditional_formatting("B3:B100", { :type => :cellIs, :operator => :greaterThan, :formula => "100000", :dxfId => profitable, :priority => 1 })
704
+ # Apply conditional using the between operator; NOTE: supply an array to :formula for between/notBetween
705
+ sheet.add_conditional_formatting("C3:C100", { :type => :cellIs, :operator => :between, :formula => ["0.00%","100.00%"], :dxfId => unprofitable, :priority => 1 })
706
+ end
707
+
708
+ wb.add_worksheet(:name => "Conditional Color Scale") do |sheet|
709
+ sheet.add_row ["Previous Year Quarterly Profits (JPY)"]
710
+ sheet.add_row ["Quarter", "Profit", "% of Total"]
711
+ offset = 3
712
+ rosheet = 20
713
+ offset.upto(rosheet + offset) do |i|
714
+ sheet.add_row ["Q#{i}", 10000*((rosheet/2-i) * (rosheet/2-i)), "=100*B#{i}/SUM(B3:B#{rosheet+offset})"], :style=>[nil, money, percent]
715
+ end
716
+ # color scale has two_tone and three_tone class methods to setup the excel defaults (2011)
717
+ # alternatively, you can pass in {:type => [:min, :max, :percent], :val => [whatever], :color =>[Some RGB String] to create a customized color scale object
718
+
719
+ color_scale = Axlsx::ColorScale.three_tone
720
+ sheet.add_conditional_formatting("B3:B100", { :type => :colorScale, :operator => :greaterThan, :formula => "100000", :dxfId => profitable, :priority => 1, :color_scale => color_scale })
721
+ end
722
+
723
+
724
+ wb.add_worksheet(:name => "Conditional Data Bar") do |sheet|
725
+ sheet.add_row ["Previous Year Quarterly Profits (JPY)"]
726
+ sheet.add_row ["Quarter", "Profit", "% of Total"]
727
+ offset = 3
728
+ rows = 20
729
+ offset.upto(rows + offset) do |i|
730
+ sheet.add_row ["Q#{i}", 10000*((rows/2-i) * (rows/2-i)), "=100*B#{i}/SUM(B3:B#{rows+offset})"], :style=>[nil, money, percent]
731
+ end
732
+ # Apply conditional formatting to range B3:B100 in the worksheet
733
+ data_bar = Axlsx::DataBar.new
734
+ sheet.add_conditional_formatting("B3:B100", { :type => :dataBar, :dxfId => profitable, :priority => 1, :data_bar => data_bar })
735
+ end
736
+
737
+ wb.add_worksheet(:name => "Conditional Format Icon Set") do |sheet|
738
+ sheet.add_row ["Previous Year Quarterly Profits (JPY)"]
739
+ sheet.add_row ["Quarter", "Profit", "% of Total"]
740
+ offset = 3
741
+ rows = 20
742
+ offset.upto(rows + offset) do |i|
743
+ sheet.add_row ["Q#{i}", 10000*((rows/2-i) * (rows/2-i)), "=100*B#{i}/SUM(B3:B#{rows+offset})"], :style=>[nil, money, percent]
744
+ end
745
+ # Apply conditional formatting to range B3:B100 in the worksheet
746
+ icon_set = Axlsx::IconSet.new
747
+ sheet.add_conditional_formatting("B3:B100", { :type => :iconSet, :dxfId => profitable, :priority => 1, :icon_set => icon_set })
748
+ end
749
+ end
750
+
751
+ # Page Breaks
752
+ if examples.include? :page_breaks
753
+ ws = wb.add_worksheet(:name => "page breaks") do |sheet|
754
+ sheet.add_row ["A"] * 10
755
+ sheet.add_row ["A"] * 10
756
+ sheet.add_page_break("B2")
757
+ sheet.sheet_view.view = :page_layout # so you can see the breaks!
758
+ end
759
+ end
760
+
761
+ #Validate and Serialize
762
+
763
+ #```ruby
764
+ # Serialize directly to file
765
+
766
+ p.serialize("example.xlsx")
767
+
768
+ # or
769
+
770
+ #Serialize to a stream
771
+ if examples.include? :streaming
772
+ s = p.to_stream()
773
+ File.open('example_streamed.xlsx', 'w') { |f| f.write(s.read) }
774
+ end
775
+ #```
776
+
777
+ ##Using Shared Strings
778
+
779
+ #```ruby
780
+ # This is required by Numbers
781
+ if examples.include? :shared_strings
782
+ p.use_shared_strings = true
783
+ p.serialize("shared_strings_example.xlsx")
784
+ end
785
+ #```
786
+
787
+ #```ruby
788
+ if examples.include? :no_autowidth
789
+ p = Axlsx::Package.new
790
+ p.use_autowidth = false
791
+ wb = p.workbook
792
+ wb.add_worksheet(:name => "Manual Widths") do | sheet |
793
+ sheet.add_row ['oh look! no autowidth']
794
+ end
795
+ p.serialize("no-use_autowidth.xlsx")
796
+ end
797
+ #```
798
+
799
+ #```ruby
800
+ if examples.include? :cached_formula
801
+ p = Axlsx::Package.new
802
+ p.use_shared_strings = true
803
+ wb = p.workbook
804
+ wb.add_worksheet(:name => "cached formula") do | sheet |
805
+ sheet.add_row [1, 2, '=A1+B1'], :formula_values => [nil, nil, 3]
806
+ end
807
+ p.serialize 'cached_formula.xlsx'
808
+ end
809
+ #```
810
+
811
+ #```ruby
812
+ if examples.include? :rich_text
813
+ p = Axlsx::Package.new
814
+ p.use_shared_strings = true
815
+ wb = p.workbook
816
+ wrap_text = wb.styles.add_style({:alignment => {:horizontal => :center, :vertical => :center, :wrap_text => true}} )
817
+ rt = Axlsx::RichText.new
818
+ rt.add_run('I\'m bold, ', :b => true)
819
+ rt.add_run('I\'m italic, ', :i => true)
820
+ rt.add_run('I\'m strike' + "\n", :strike => true)
821
+ rt.add_run('I\'m bold, italic and strike' + "\n", :b => true, :i => true, :strike => true)
822
+ rt.add_run('I\'m style-less :D')
823
+ wb.add_worksheet(:name => "RichText") do | sheet |
824
+ sheet.add_row [rt], :style => wrap_text
825
+ end
826
+ p.serialize 'rich_text.xlsx'
827
+ end
828
+ #```