axlsx 1.1.4 → 1.3.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 (242) hide show
  1. data/.yardopts +6 -2
  2. data/CHANGELOG.md +72 -0
  3. data/README.md +114 -31
  4. data/Rakefile +11 -3
  5. data/examples/auto_filter.rb +16 -0
  6. data/examples/auto_filter.xlsx +0 -0
  7. data/examples/basic_charts.rb +58 -0
  8. data/examples/chart_colors.rb +17 -2
  9. data/examples/data_validation.rb +50 -0
  10. data/examples/example.rb +171 -60
  11. data/examples/example.xlsx +0 -0
  12. data/examples/example_streamed.xlsx +0 -0
  13. data/examples/extractive.pdf +0 -0
  14. data/examples/extractive.rb +3 -0
  15. data/examples/extractive.xlsx +0 -0
  16. data/examples/hyperlinks.rb +23 -0
  17. data/examples/hyperlinks.xlsx +0 -0
  18. data/examples/no-use_autowidth.xlsx +0 -0
  19. data/examples/page_setup.rb +11 -0
  20. data/examples/page_setup.xlsx +0 -0
  21. data/examples/scraping_html.rb +91 -0
  22. data/examples/shared_strings_example.xlsx +0 -0
  23. data/examples/sheet_protection.rb +10 -0
  24. data/examples/sheet_view.rb +34 -0
  25. data/examples/skydrive/axlsx.csv +1 -0
  26. data/examples/skydrive/axlsx.xlsx +0 -0
  27. data/examples/skydrive/real_example.rb +8 -8
  28. data/examples/sprk2012/Screen Shot 2012-09-11 at 10.42.06 PM.png +0 -0
  29. data/examples/sprk2012/Screen Shot 2012-09-11 at 11.07.48 PM.png +0 -0
  30. data/examples/sprk2012/Screen Shot 2012-09-11 at 8.31.50 PM.png +0 -0
  31. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.23.27 PM.png +0 -0
  32. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.32.06 PM.png +0 -0
  33. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.33.35 PM.png +0 -0
  34. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.46.44 PM.png +0 -0
  35. data/examples/sprk2012/Screen Shot 2012-09-12 at 5.07.23 PM.png +0 -0
  36. data/examples/sprk2012/basics.rb +11 -0
  37. data/examples/sprk2012/basics.xlsx +0 -0
  38. data/examples/sprk2012/gravatar.jpeg +0 -0
  39. data/examples/sprk2012/hair_club.jpg +0 -0
  40. data/examples/sprk2012/images.rb +9 -0
  41. data/examples/sprk2012/images.xlsx +0 -0
  42. data/examples/sprk2012/line_chart.rb +56 -0
  43. data/examples/sprk2012/line_chart.xlsx +0 -0
  44. data/examples/sprk2012/sprk2012.key +0 -0
  45. data/examples/sprk2012/styles.rb +20 -0
  46. data/examples/sprk2012/styles.xlsx +0 -0
  47. data/examples/styles.rb +62 -0
  48. data/examples/styles.xlsx +0 -0
  49. data/examples/two_cell_anchor_image.rb +11 -0
  50. data/lib/axlsx/content_type/content_type.rb +2 -0
  51. data/lib/axlsx/content_type/default.rb +30 -15
  52. data/lib/axlsx/content_type/override.rb +29 -14
  53. data/lib/axlsx/doc_props/app.rb +161 -104
  54. data/lib/axlsx/doc_props/core.rb +9 -5
  55. data/lib/axlsx/drawing/ax_data_source.rb +7 -6
  56. data/lib/axlsx/drawing/axis.rb +82 -36
  57. data/lib/axlsx/drawing/bar_3D_chart.rb +49 -45
  58. data/lib/axlsx/drawing/bar_series.rb +2 -1
  59. data/lib/axlsx/drawing/cat_axis.rb +43 -39
  60. data/lib/axlsx/drawing/chart.rb +65 -54
  61. data/lib/axlsx/drawing/d_lbls.rb +100 -0
  62. data/lib/axlsx/drawing/drawing.rb +20 -8
  63. data/lib/axlsx/drawing/graphic_frame.rb +2 -1
  64. data/lib/axlsx/drawing/line_3D_chart.rb +3 -10
  65. data/lib/axlsx/drawing/num_data.rb +2 -2
  66. data/lib/axlsx/drawing/num_data_source.rb +4 -1
  67. data/lib/axlsx/drawing/pic.rb +44 -4
  68. data/lib/axlsx/drawing/pie_3D_chart.rb +10 -7
  69. data/lib/axlsx/drawing/scatter_chart.rb +2 -8
  70. data/lib/axlsx/drawing/title.rb +21 -9
  71. data/lib/axlsx/drawing/two_cell_anchor.rb +46 -9
  72. data/lib/axlsx/drawing/view_3D.rb +42 -32
  73. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  74. data/lib/axlsx/drawing/vml_shape.rb +125 -0
  75. data/lib/axlsx/package.rb +43 -16
  76. data/lib/axlsx/rels/relationship.rb +3 -3
  77. data/lib/axlsx/rels/relationships.rb +1 -11
  78. data/lib/axlsx/stylesheet/gradient_fill.rb +1 -1
  79. data/lib/axlsx/stylesheet/styles.rb +11 -2
  80. data/lib/axlsx/stylesheet/table_style.rb +3 -3
  81. data/lib/axlsx/util/constants.rb +131 -2
  82. data/lib/axlsx/util/simple_typed_list.rb +18 -22
  83. data/lib/axlsx/util/validators.rb +100 -9
  84. data/lib/axlsx/version.rb +2 -7
  85. data/lib/axlsx/workbook/defined_name.rb +174 -0
  86. data/lib/axlsx/workbook/defined_names.rb +21 -0
  87. data/lib/axlsx/workbook/workbook.rb +70 -13
  88. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  89. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +102 -0
  90. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +253 -0
  91. data/lib/axlsx/workbook/worksheet/cell.rb +41 -8
  92. data/lib/axlsx/workbook/worksheet/col.rb +15 -0
  93. data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
  94. data/lib/axlsx/workbook/worksheet/comment.rb +101 -0
  95. data/lib/axlsx/workbook/worksheet/comments.rb +85 -0
  96. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  97. data/lib/axlsx/workbook/worksheet/data_bar.rb +1 -1
  98. data/lib/axlsx/workbook/worksheet/data_validation.rb +245 -0
  99. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  100. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +1 -1
  101. data/lib/axlsx/workbook/worksheet/dimension.rb +65 -0
  102. data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
  103. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +47 -0
  104. data/lib/axlsx/workbook/worksheet/page_setup.rb +241 -0
  105. data/lib/axlsx/workbook/worksheet/pane.rb +144 -0
  106. data/lib/axlsx/workbook/worksheet/print_options.rb +63 -0
  107. data/lib/axlsx/workbook/worksheet/protected_range.rb +46 -0
  108. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
  109. data/lib/axlsx/workbook/worksheet/row.rb +36 -20
  110. data/lib/axlsx/workbook/worksheet/selection.rb +111 -0
  111. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +49 -0
  112. data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
  113. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +107 -0
  114. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +224 -0
  115. data/lib/axlsx/workbook/worksheet/sheet_view.rb +379 -0
  116. data/lib/axlsx/workbook/worksheet/table.rb +10 -3
  117. data/lib/axlsx/workbook/worksheet/table_style_info.rb +68 -0
  118. data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
  119. data/lib/axlsx/workbook/worksheet/worksheet.rb +414 -254
  120. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
  121. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
  122. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +101 -0
  123. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  124. data/lib/axlsx.rb +38 -16
  125. data/test/content_type/tc_content_type.rb +1 -6
  126. data/test/doc_props/tc_app.rb +31 -1
  127. data/test/doc_props/tc_core.rb +3 -1
  128. data/test/drawing/tc_axis.rb +38 -3
  129. data/test/drawing/tc_bar_3D_chart.rb +12 -12
  130. data/test/drawing/tc_bar_series.rb +1 -2
  131. data/test/drawing/tc_cat_axis.rb +3 -3
  132. data/test/drawing/tc_chart.rb +29 -9
  133. data/test/drawing/tc_d_lbls.rb +47 -0
  134. data/test/drawing/tc_drawing.rb +11 -5
  135. data/test/drawing/tc_hyperlink.rb +4 -5
  136. data/test/drawing/tc_line_series.rb +7 -3
  137. data/test/drawing/tc_num_data.rb +5 -1
  138. data/test/drawing/tc_pic.rb +22 -2
  139. data/test/drawing/tc_pie_3D_chart.rb +4 -8
  140. data/test/drawing/tc_pie_series.rb +7 -2
  141. data/test/drawing/tc_scatter_chart.rb +6 -1
  142. data/test/drawing/tc_scatter_series.rb +1 -1
  143. data/test/drawing/tc_series.rb +1 -1
  144. data/test/drawing/tc_title.rb +16 -0
  145. data/test/drawing/tc_two_cell_anchor.rb +1 -2
  146. data/test/drawing/tc_view_3D.rb +18 -18
  147. data/test/drawing/tc_vml_drawing.rb +25 -0
  148. data/test/drawing/tc_vml_shape.rb +100 -0
  149. data/test/rels/tc_relationship.rb +1 -0
  150. data/test/stylesheet/tc_gradient_fill.rb +8 -0
  151. data/test/stylesheet/tc_pattern_fill.rb +7 -1
  152. data/test/stylesheet/tc_styles.rb +16 -4
  153. data/test/stylesheet/tc_table_style.rb +8 -0
  154. data/test/stylesheet/tc_table_style_element.rb +10 -1
  155. data/test/tc_helper.rb +1 -0
  156. data/test/tc_package.rb +94 -17
  157. data/test/util/tc_simple_typed_list.rb +13 -0
  158. data/test/util/tc_validators.rb +101 -8
  159. data/test/workbook/tc_defined_name.rb +41 -0
  160. data/test/workbook/tc_workbook.rb +5 -3
  161. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  162. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  163. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  164. data/test/workbook/worksheet/tc_cell.rb +53 -7
  165. data/test/workbook/worksheet/tc_col.rb +9 -0
  166. data/test/workbook/worksheet/tc_comment.rb +57 -0
  167. data/test/workbook/worksheet/tc_comments.rb +57 -0
  168. data/test/workbook/worksheet/tc_conditional_formatting.rb +44 -0
  169. data/test/workbook/worksheet/tc_data_bar.rb +1 -1
  170. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  171. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  172. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  173. data/test/workbook/worksheet/tc_pane.rb +94 -0
  174. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  175. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  176. data/test/workbook/worksheet/tc_row.rb +32 -14
  177. data/test/workbook/worksheet/tc_selection.rb +94 -0
  178. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  179. data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
  180. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  181. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  182. data/test/workbook/worksheet/{table/tc_table.rb → tc_table.rb} +9 -12
  183. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  184. data/test/workbook/worksheet/tc_worksheet.rb +155 -51
  185. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +64 -0
  186. metadata +194 -81
  187. data/examples/#extractive.csv# +0 -0
  188. data/examples/#extractive.rb# +0 -45
  189. data/examples/chart_colors.rb~ +0 -0
  190. data/examples/chart_colors.xlsx +0 -0
  191. data/examples/colored_series_data.xlsx +0 -0
  192. data/examples/conditional_formatting/getting_barred.xlsx +0 -0
  193. data/examples/example.csv +0 -1000
  194. data/examples/extractive.csv +0 -1
  195. data/examples/extractive.csv~ +0 -1
  196. data/examples/extractive.rb~ +0 -3
  197. data/examples/stack.rb +0 -21
  198. data/examples/stack.rb~ +0 -27
  199. data/examples/stack.xlsx +0 -0
  200. data/examples/~$chart_colors.xlsx +0 -0
  201. data/examples/~$extractive.xlsx +0 -0
  202. data/lib/axlsx/drawing/ax_data_source.rb~ +0 -55
  203. data/lib/axlsx/drawing/data_source.rb~ +0 -51
  204. data/lib/axlsx/drawing/hlink_click.rb~ +0 -0
  205. data/lib/axlsx/drawing/hyperlink.rb~ +0 -64
  206. data/lib/axlsx/drawing/num_data.rb~ +0 -51
  207. data/lib/axlsx/drawing/num_data_source.rb~ +0 -54
  208. data/lib/axlsx/drawing/num_val.rb~ +0 -40
  209. data/lib/axlsx/drawing/picture_locking.rb~ +0 -36
  210. data/lib/axlsx/drawing/ref.rb~ +0 -41
  211. data/lib/axlsx/drawing/str_data.rb~ +0 -58
  212. data/lib/axlsx/drawing/str_val.rb~ +0 -35
  213. data/lib/axlsx/util/cbf.rb +0 -333
  214. data/lib/axlsx/util/cfb.rb~ +0 -201
  215. data/lib/axlsx/util/font_tables.rb~ +0 -0
  216. data/lib/axlsx/util/ms_off_crypto.rb +0 -189
  217. data/lib/axlsx/util/ms_off_crypto.rb~ +0 -3
  218. data/lib/axlsx/util/ms_offcrypto.rb~ +0 -0
  219. data/lib/axlsx/util/parser.rb~ +0 -6
  220. data/lib/axlsx/util/storage.rb~ +0 -0
  221. data/lib/axlsx/workbook/shared_strings_table.rb~ +0 -69
  222. data/lib/axlsx/workbook/worksheet/cfvo.rb~ +0 -0
  223. data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
  224. data/lib/axlsx/workbook/worksheet/color_scale.rb~ +0 -46
  225. data/lib/axlsx/workbook/worksheet/data_bar.rb~ +0 -0
  226. data/lib/axlsx/workbook/worksheet/icon_set.rb~ +0 -95
  227. data/lib/axlsx/workbook/worksheet/shared_strings_table.rb~ +0 -0
  228. data/lib/axlsx/workbook/worksheet/table.rb~ +0 -97
  229. data/lib/schema/dc.xsd~ +0 -118
  230. data/lib/schema/dcterms.xsd~ +0 -331
  231. data/lib/schema/opc-coreProperties.xsd~ +0 -50
  232. data/test/drawing/tc_data_source.rb~ +0 -30
  233. data/test/drawing/tc_num_data.rb~ +0 -35
  234. data/test/drawing/tc_num_val.rb~ +0 -29
  235. data/test/drawing/tc_str_data.rb~ +0 -30
  236. data/test/drawing/tc_str_val.rb~ +0 -26
  237. data/test/workbook/worksheet/table/tc_table.rb~ +0 -72
  238. data/test/workbook/worksheet/tc_cfvo.rb~ +0 -20
  239. data/test/workbook/worksheet/tc_col.rb~ +0 -10
  240. data/test/workbook/worksheet/tc_color_scale.rb~ +0 -0
  241. data/test/workbook/worksheet/tc_data_bar.rb~ +0 -0
  242. data/test/workbook/worksheet/tc_icon_set.rb~ +0 -0
data/.yardopts CHANGED
@@ -1,5 +1,9 @@
1
1
  --protected
2
2
  --no-private
3
3
  --title "AXLSX"
4
- --files LICENSE
5
- --files CHANGELOG.md
4
+ --readme README.md
5
+ --markup markdown
6
+ --markup-provider kramdown
7
+ -
8
+ CHANGELOG.md
9
+ LICENSE
data/CHANGELOG.md CHANGED
@@ -1,5 +1,77 @@
1
1
  CHANGELOG
2
2
  ---------
3
+ - **August.27.12**: 1.2.2
4
+ - minor patch for auto-filters
5
+ - minor documentation improvements.
6
+ - **August.12.12**: 1.2.1
7
+ - Add support for hyperlinks in worksheets
8
+ - Fix example that was using old style cell merging with concact.
9
+ - Fix bug that occurs when calculating the font_size for cells that use a user specified style which does not define sz
10
+ - **August.5.12**: 1.2.0
11
+ - rebuilt worksheet serialization to clean up the code base a bit.
12
+ - added data labels for charts
13
+ - added table header printing for each sheet via defined_name. This
14
+ means that when you print your worksheet, the header rows show for every page
15
+ - **July.??.12**: 1.1.9 release
16
+ - lots of code clean up for worksheet
17
+ - added in data labels for pie charts, line charts and bar charts.
18
+ - bugfix chard with data in a sheet that has a space in the name are
19
+ now auto updating formula based values
20
+ - **July.14.12**: 1.1.8 release
21
+ - added html entity encoding for sheet names. This allows you to use
22
+ characters like '<' and '&' in your sheet names.
23
+ - new - first round google docs interoperability
24
+ - added filter to strip out control characters from cell data.
25
+ - added in interop requirements so that charts are properly exported
26
+ to PDF from Libra Office
27
+ - various readability improvements and work standardizing attribute
28
+ names to snake_case. Aliases are provided for backward compatiblity
29
+ - **June.11.12**: 1.1.7 release
30
+ - fix chart rendering issue when label offset is specified as a
31
+ percentage in serialization and ensure that formula are not stored
32
+ in value caches
33
+ - fix bug that causes repair warnings when using a text only title reference.
34
+ - Add title property to axis so you can lable the x/y/series axis for
35
+ charts.
36
+ - Add sheet views with panes
37
+ - **May.30.12**: 1.1.6 release
38
+ - data protection with passwords for sheets
39
+ - cell level input validators
40
+ - added support for two cell anchors for images
41
+ - test coverage now back up to 100%
42
+ - bugfix for merge cell sorting algorithm
43
+ - added fit_to method for page_setup to simplify managing witdh/height
44
+ - added ph (phonetics) and s (style) attributes for row.
45
+ - resolved all warnings generating from this gem.
46
+ - improved comment relationship management for multiple comments
47
+ - **May.13.12**: 1.1.5 release
48
+ - MOAR print options! You can now specify paper size, orientation,
49
+ fit to width, page margings and gridlines for printing.
50
+ - Support for adding comments to your worksheets
51
+ - bugfix for applying style to empty cells
52
+ - bugfix for parsing formula with multiple '='
53
+
54
+ - **May.3.12:**: 1.1.4 release
55
+ - MOAR examples
56
+ - added outline level for rows and columns
57
+ - rebuild of numeric and axis data sources for charts
58
+ - added delete to axis
59
+ - added tick and label mark skipping for cat axis in charts
60
+ - bugfix for table headers method
61
+ - sane(er) defaults for chart positioning
62
+ - bugfix in val_axis_data to properly serialize value axis data. Excel does not mind as it reads from the sheet, but nokogiri has a fit if the elements are empty.
63
+ - Added support for specifying the color of data series in charts.
64
+ - bugfix using add_cell on row mismanaged calls to update_column_info.
65
+
66
+ - ** April.25.12:**: 1.1.3 release
67
+ - Primarily because I am stupid.....Updates to readme to properly report version, add in missing docs and restructure example directory.
68
+
69
+ - ** April.25.12:**: 1.1.2 release
70
+ - Conditional Formatting completely implemented.
71
+ - refactoring / documentation for Style#add_style
72
+ - added in label rotation for chart axis labels
73
+ - bugfix to properly assign style and type info to cells when only partial information is provided in the types/style option
74
+
3
75
  - ** April.18.12**: 1.1.1 release
4
76
  - bugfix for autowidth calculations across multiple rows
5
77
  - bugfix for dimension calculations with nil cells.
data/README.md CHANGED
@@ -2,6 +2,11 @@ Axlsx: Office Open XML Spreadsheet Generation
2
2
  ====================================
3
3
  [![Build Status](https://secure.travis-ci.org/randym/axlsx.png)](http://travis-ci.org/randym/axlsx/)
4
4
 
5
+ If you are using axlsx for comercial purposes, or just want to show your
6
+ appreciation for the gem, please don't hesitate to make a donation.
7
+
8
+ [![Click here to lend your support to: axlsx and make a donation at www.pledgie.com !](http://www.pledgie.com/campaigns/17814.png?skin_name=chrome)](http://www.pledgie.com/campaigns/17814)
9
+
5
10
  **IRC**:[irc.freenode.net / #axlsx](irc://irc.freenode.net/axlsx)
6
11
 
7
12
  **Git**:[http://github.com/randym/axlsx](http://github.com/randym/axlsx)
@@ -16,7 +21,7 @@ Axlsx: Office Open XML Spreadsheet Generation
16
21
 
17
22
  **License**: MIT License
18
23
 
19
- **Latest Version**: 1.1.4
24
+ **Latest Version**: 1.3.1
20
25
 
21
26
  **Ruby Version**: 1.8.7, 1.9.2, 1.9.3
22
27
 
@@ -24,19 +29,32 @@ Axlsx: Office Open XML Spreadsheet Generation
24
29
 
25
30
  **Rubinius Version**: rubinius 2.0.0dev * lower versions may run, this gem always tests against head.
26
31
 
27
- **Release Date**: May 3rd 2012
32
+ **Release Date**: September 30th 2012
28
33
 
29
34
  If you are working in rails, or with active record see:
30
- http://github.com/randym/acts_as_xlsx
35
+ * http://github.com/randym/acts_as_xlsx
36
+ acts_as_xlsx is a simple ActiveRecord mixin that lets you generate a workbook with:
37
+
38
+ ```ruby
39
+ Posts.where(created_at > Time.now-30.days).to_xlsx
40
+ ```
41
+
42
+ ** and **
43
+
44
+ * http://github.com/straydogstudio/axlsx_rails
45
+ Axlsx_Rails provides an Axlsx renderer so you can move all your spreadsheet code from your controller into view files. Partials are supported so you can organize any code into reusable chunks (e.g. cover sheets, common styling, etc.) You can use it with acts_as_xlsx, placing the to_xlsx call in a view and add ':package => xlsx_package' to the parameter list. Now you can keep your controllers thin!
31
46
 
32
47
  There are guides for using axlsx and acts_as_xlsx here:
33
- [http://axlsx.blogspot.com](http://axlsx.blogspot.com)
48
+ [http://axlsx.blog.randym.net](http://axlsx.blog.randym.net)
49
+
50
+ The examples directory contains a number of more specific examples as
51
+ well.
34
52
 
35
53
  Synopsis
36
54
  --------
37
55
 
38
56
  Axlsx is an Office Open XML Spreadsheet generator for the Ruby programming language.
39
- With Axlsx you can create excel worksheets with charts, images (with links), automated and fixed column widths, customized styles, functions, merged cells, auto filters, file and stream serialization as well as full schema validation. Axlsx excels at helping you generate beautiful Office Open XML Spreadsheet documents without having to understand the entire ECMA specification.
57
+ With Axlsx you can create excel worksheets with charts, images (with links), automated and fixed column widths, customized styles, functions, tables, conditional formatting, print options, comments, merged cells, auto filters, file and stream serialization as well as full schema validation. Axlsx excels at helping you generate beautiful Office Open XML Spreadsheet documents without having to understand the entire ECMA specification.
40
58
 
41
59
  ![Screen 1](https://github.com/randym/axlsx/raw/master/examples/sample.png)
42
60
 
@@ -63,9 +81,8 @@ Feature List
63
81
 
64
82
  **9. Cell level style overrides for default and customized style objects
65
83
 
66
- **10. Support for formulas
67
-
68
- **11. Support for cell merging as well as column and row outline
84
+ **10. Support for formulas, merging, row and column outlining as well as
85
+ cell level input data validation.
69
86
 
70
87
  **12. Auto filtering tables with worksheet.auto_filter as well as support for Tables
71
88
 
@@ -75,6 +92,15 @@ Feature List
75
92
 
76
93
  **15. Support for page margins and print options
77
94
 
95
+ **16. Support for password and non password based sheet protection.
96
+
97
+ **17. First stage interoperability support for GoogleDocs, LibreOffice,
98
+ and Numbers
99
+
100
+ **18. Support for defined names, which gives you repeated header rows for printing.
101
+
102
+ **19. Data labels for charts as well as series color customization.
103
+
78
104
  Installing
79
105
  ----------
80
106
 
@@ -86,12 +112,28 @@ To install Axlsx, use the following command:
86
112
  ------
87
113
 
88
114
  The example listing is getting overly large to maintain here.
89
- If you are using Yard, you will be able to see the examples inline below.
90
- If not, please refer to the Please see the {file:examples/example.rb} file.
115
+ If you are using Yard, you will be able to see the examples in line below.
116
+
117
+ Here's a teaser that kicks about 2% of what the gem can do.
118
+
119
+ ```ruby
120
+ Axlsx::Package.new do |p|
121
+ p.workbook.add_worksheet(:name => "Pie Chart") do |sheet|
122
+ sheet.add_row ["Simple Pie Chart"]
123
+ %w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
124
+ sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,5], :end_at => [10, 20], :title => "example 3: Pie Chart") do |chart|
125
+ chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"], :colors => ['FF0000', '00FF00', '0000FF']
126
+ end
127
+ end
128
+ p.serialize('simple.xlsx')
129
+ end
130
+ ```
131
+
132
+ Please see the [examples](https://github.com/randym/axlsx/tree/master/examples/example.rb) for more.
91
133
 
92
134
  {include:file:examples/example.rb}
93
135
 
94
- There is much, much more you can do with this gem. If you get stuck, grab me on IRC or submit an issue to Github. Chances are that it has already been implemented. If it hasn't - let's take a look at adding it in.
136
+ There is much, much more you can do with this gem. If you get stuck, grab me on IRC or submit an issue to GitHub. Chances are that it has already been implemented. If it hasn't - let's take a look at adding it in.
95
137
 
96
138
  #Documentation
97
139
  --------------
@@ -107,30 +149,61 @@ This gem has 100% test coverage using test/unit. To execute tests for this gem,
107
149
 
108
150
  #Change log
109
151
  ---------
110
- - ** May.3.12:**: 1.1.4 release
111
- - MOAR examples
112
- - added outline level for rows and columns
113
- - rebuild of numeric and axis data sources for charts
114
- - added delete to axis
115
- - added tick and label mark skipping for cat axis in charts
116
- - bugfix for table headers method
117
- - sane(er) defaults for chart positioning
118
- - bugfix in val_axis_data to properly serialize value axis data. Excel does not mind as it reads from the sheet, but nokogiri has a fit if the elements are empty.
119
- - Added support for specifying the color of data series in charts.
120
- - bugfix using add_cell on row mismanaged calls to update_column_info.
121
-
122
- - ** April.25.12:**: 1.1.3 release
123
- - Primarily because I am stupid.....Updates to readme to properly report version, add in missing docs and restructure example directory.
124
-
125
- - ** April.25.12:**: 1.1.2 release
126
- - Conditional Formatting completely implemented.
127
- - refactoring / documentation for Style#add_style
128
- - added in label rotation for chart axis labels
129
- - bugfix to properly assign style and type info to cells when only partial information is provided in the types/style option
152
+ - **September.30.12**: 1.3.1
153
+ - Improved control character handling
154
+ - Added stored auto filter values and date grouping items
155
+ - Improved support for autowidth when custom styles are applied
156
+ - Added support for table style info that lets you take advantage of
157
+ all the predefined table styles.
158
+ - Improved style management for fonts so they merge undefined values
159
+ from the initial master.
160
+ - **September.8.12**: 1.2.3
161
+ - enhance exponential float/bigdecimal values rendering as strings intead
162
+ of 'numbers' in excel.
163
+ - added support for :none option on chart axis labels
164
+ - added support for paper_size option on worksheet.page_setup
130
165
 
131
166
  Please see the {file:CHANGELOG.md} document for past release information.
132
167
 
168
+ # Known interoperability issues.
169
+ As axslx implements the Office Open XML (ECMA-376 spec) much of the
170
+ functionality is interoperable with other spreadsheet software. Below is
171
+ a listing of some known issues.
172
+
173
+ 1. Libra Office
174
+ - You must specify colors for your series. see examples/chart_colors.rb
175
+ for an example.
176
+ - You must use data in your sheet for charts. You cannot use hard coded
177
+ values.
178
+ - Chart axis and gridlines do not render. I have a feeling this is
179
+ related to themes, which axlsx does not implement at this time.
180
+
181
+ 2. Google Docs
182
+ - Images are known to not work with google docs
183
+ - border colors do not work
184
+
185
+ 3. Numbers
186
+ - you must set 'use_shared_strings' to true. This is most
187
+ conveniently done just before rendering by calling Package.use_shared_strings = true prior to serialization.
188
+
189
+ ```ruby
190
+ p = Axlsx::Package.new
191
+ p.workbook.add_worksheet(:name => "Basic Worksheet") do |sheet|
192
+ sheet.add_row ["First Column", "Second", "Third"]
193
+ sheet.add_row [1, 2, 3]
194
+ end
195
+ p.use_shared_strings = true
196
+ p.serialize('simple.xlsx')
197
+ ```
198
+
199
+ - charts do not render
200
+
201
+
133
202
  #Thanks!
203
+
204
+ Open source software is a community effort. None of this could have been
205
+ done without the help of the people below.
206
+
134
207
  --------
135
208
  [ochko](https://github.com/ochko) - for performance fixes, kicking the crap out of axlsx and helping to maintain my general sanity.
136
209
 
@@ -152,6 +225,16 @@ Please see the {file:CHANGELOG.md} document for past release information.
152
225
 
153
226
  [scpike](https://github.com/scpike) - for keeping numbers fixed even when they are rational and a super clean implementation of conditional formatting.
154
227
 
228
+ [janhuehne](https://github.com/janhuehne) - for working out the decoder ring and adding in cell level validation, and providing a support for window panes.
229
+
230
+ [rfc2616](https://github.com/rfc2616) - for FINALLY working out the interop issues with google docs.
231
+
232
+ [straydogstudio](https://github.com/straydocstudio) - For making an AWESOME axlsx templating gem for rails.
233
+
234
+ [MitchellAJ](https://github.com/MitchellAJ) - For catching a bug in font_size calculations, finding some old code in an example and above all for reporting all of that brilliantly
235
+
236
+ [ebenoist](https://github.com/ebenoist) - For taking control of control characters and keeping what is between the lines, between the lines.
237
+
155
238
  #Copyright and License
156
239
  ----------
157
240
 
data/Rakefile CHANGED
@@ -9,7 +9,9 @@ task :benchmark do
9
9
  end
10
10
 
11
11
  task :gendoc do
12
- system "yardoc"
12
+ #puts 'yard doc generation disabled until JRuby build native extensions for redcarpet or yard removes the dependency.'
13
+ system "yardoc"
14
+ #system "yard stats --list-undoc"
13
15
  end
14
16
 
15
17
  task :test do
@@ -17,12 +19,18 @@ task :test do
17
19
  Rake::TestTask.new do |t|
18
20
  t.libs << 'test'
19
21
  t.test_files = FileList['test/**/tc_*.rb']
20
- t.verbose = true
22
+ t.verbose = false
23
+ t.warning = true
21
24
  end
22
25
  end
23
26
 
27
+ task :report do
28
+ require 'cover_me'
29
+ CoverMe.complete!
30
+ end
31
+
24
32
  task :release => :build do
25
33
  system "gem push axlsx-#{Axlsx::VERSION}.gem"
26
34
  end
27
35
 
28
- task :default => :test
36
+ task :default => :test
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby -w -s
2
+ # -*- coding: utf-8 -*-
3
+
4
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
5
+ require 'axlsx'
6
+ Axlsx::Package.new do |p|
7
+ p.workbook.add_worksheet(:name => "Table") do |sheet|
8
+ sheet.add_row ["Build Matrix"]
9
+ sheet.add_row ["Build", "Duration", "Finished", "Rvm"]
10
+ sheet.add_row ["19.1", "1 min 32 sec", "about 10 hours ago", "1.8.7"]
11
+ sheet.add_row ["19.2", "1 min 28 sec", "about 10 hours ago", "1.9.2"]
12
+ sheet.add_row ["19.3", "1 min 35 sec", "about 10 hours ago", "1.9.3"]
13
+ sheet.auto_filter = 'A2:D5'
14
+ sheet.auto_filter.add_column 3, :filters, :filter_items => ['1.9.2']
15
+ end
16
+ end.serialize('auto_filter.xlsx')
Binary file
@@ -0,0 +1,58 @@
1
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
2
+ require 'axlsx'
3
+ p = Axlsx::Package.new
4
+ wb = p.workbook
5
+
6
+ # Pie Chart
7
+ wb.add_worksheet(:name => "Pie Chart") do |sheet|
8
+ sheet.add_row ["First", "Second", "Third", "Fourth"]
9
+ sheet.add_row [1, 2, 3, 4]
10
+ sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,2], :end_at => [5, 15], :title=> 'dark corner here') do |chart|
11
+ chart.add_series :data => sheet["A2:D2"], :labels => sheet["A1:D1"]
12
+ chart.d_lbls.show_val = true
13
+ chart.d_lbls.show_percent = true
14
+ chart.d_lbls.d_lbl_pos = :outEnd
15
+ chart.d_lbls.show_leader_lines = true
16
+ end
17
+ end
18
+
19
+ # line chart
20
+ wb.add_worksheet(:name => "Line Chart") do |sheet|
21
+ sheet.add_row ['1', '2', '3', '4']
22
+ sheet.add_row [1, 2, 3, '=sum(A2:C2)']
23
+ sheet.add_chart(Axlsx::Line3DChart, :start_at => [0,2], :end_at => [5, 15], :title => "Chart") do |chart|
24
+ chart.add_series :data => sheet["A2:D2"], :labels => sheet["A1:D1"], :title => 'bob'
25
+ chart.d_lbls.show_val = true
26
+ chart.d_lbls.show_cat_name = true
27
+ chart.catAxis.tick_lbl_pos = :none
28
+
29
+ end
30
+ end
31
+
32
+ # bar chart
33
+ wb.add_worksheet(:name => "Bar Chart") do |sheet|
34
+ sheet.add_row ["A Simple Bar Chart"]
35
+ sheet.add_row ["First", "Second", "Third"]
36
+ sheet.add_row [1, 2, 3]
37
+ sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A4", :end_at => "F17") do |chart|
38
+ chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :title => sheet["A1"]
39
+ chart.valAxis.label_rotation = -45
40
+ chart.catAxis.label_rotation = 45
41
+ chart.d_lbls.d_lbl_pos = :outEnd
42
+ chart.d_lbls.show_val = true
43
+
44
+ chart.catAxis.tick_lbl_pos = :none
45
+ end
46
+ end
47
+
48
+ # specifying colors and title
49
+ wb.add_worksheet(:name => "Colored Pie Chart") do |sheet|
50
+ sheet.add_row ["First", "Second", "Third", "Fourth"]
51
+ sheet.add_row [1, 2, 3, "=PRODUCT(A2:C2)"]
52
+ sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,2], :end_at => [5, 15], :title => "example 3: Pie Chart") do |chart|
53
+ chart.add_series :data => sheet["A2:D2"], :labels => ["A1:D1"], :colors => ['FF0000', '00FF00', '0000FF']
54
+ end
55
+ end
56
+
57
+ p.serialize('basic_charts.xlsx')
58
+
@@ -36,7 +36,7 @@ end
36
36
  sheet.add_row ["First", "Second", "Third", "Fourth"]
37
37
  sheet.add_row [1, 2, 3, "=PRODUCT(A2:C2)"]
38
38
  sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,2], :end_at => [5, 15], :title => "example 3: Pie Chart") do |chart|
39
- chart.add_series :data => sheet["A2:D2"], :labels => sheet["A1:D1"], :colors => ['FF0000', '00FF00', '0000FF']
39
+ chart.add_series :data => sheet["A2:D2"], :labels => sheet["A1:D1"], :colors => ['FF0000', '00FF00', '0000FF', '000000']
40
40
  end
41
41
  end
42
42
 
@@ -45,7 +45,7 @@ end
45
45
  wb.add_worksheet(:name => "Line Chart") do |sheet|
46
46
  sheet.add_row ["First", 1, 5, 7, 9]
47
47
  sheet.add_row ["Second", 5, 2, 14, 9]
48
- sheet.add_chart(Axlsx::Line3DChart, :title => "example 6: Line Chart", :rotX => 30, :rotY => 20) do |chart|
48
+ sheet.add_chart(Axlsx::Line3DChart, :title => "example 6: Line Chart", :rotX => 30, :rotY => 30) do |chart|
49
49
  chart.start_at 0, 2
50
50
  chart.end_at 10, 15
51
51
  chart.add_series :data => sheet["B1:E1"], :title => sheet["A1"], :color => "FF0000"
@@ -53,6 +53,21 @@ wb.add_worksheet(:name => "Line Chart") do |sheet|
53
53
  end
54
54
  end
55
55
 
56
+ wb.add_worksheet(:name => 'Line Chart with Axis colors') do |sheet|
57
+ sheet.add_row ["First", 1, 5, 7, 9]
58
+ sheet.add_row ["Second", 5, 2, 14, 9]
59
+ sheet.add_chart(Axlsx::Line3DChart, :title => "example 7: Flat Line Chart", :rot_x => 0, :perspective => 0) do |chart|
60
+ chart.valAxis.color = "FFFF00"
61
+ chart.catAxis.color = "00FFFF"
62
+ chart.serAxis.delete = true
63
+ chart.start_at 0, 2
64
+ chart.end_at 10, 15
65
+ chart.add_series :data => sheet["B1:E1"], :title => sheet["A1"], :color => "FF0000"
66
+ chart.add_series :data => sheet["B2:E2"], :title => sheet["A2"], :color => "00FF00"
67
+ end
68
+
69
+ end
70
+
56
71
  ##Generating A Scatter Chart
57
72
 
58
73
  wb.add_worksheet(:name => "Scatter Chart") do |sheet|
@@ -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'