caxlsx 3.2.0 → 3.3.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 (300) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +385 -354
  5. data/LICENSE +21 -21
  6. data/README.md +165 -168
  7. data/Rakefile +29 -29
  8. data/examples/generate.rb +15 -15
  9. data/lib/axlsx/content_type/abstract_content_type.rb +32 -32
  10. data/lib/axlsx/content_type/content_type.rb +26 -26
  11. data/lib/axlsx/content_type/default.rb +25 -25
  12. data/lib/axlsx/content_type/override.rb +25 -25
  13. data/lib/axlsx/doc_props/app.rb +235 -235
  14. data/lib/axlsx/doc_props/core.rb +39 -39
  15. data/lib/axlsx/drawing/area_chart.rb +99 -99
  16. data/lib/axlsx/drawing/area_series.rb +110 -110
  17. data/lib/axlsx/drawing/ax_data_source.rb +26 -26
  18. data/lib/axlsx/drawing/axes.rb +61 -61
  19. data/lib/axlsx/drawing/axis.rb +190 -190
  20. data/lib/axlsx/drawing/bar_3D_chart.rb +148 -148
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -138
  22. data/lib/axlsx/drawing/bar_series.rb +97 -97
  23. data/lib/axlsx/drawing/bubble_chart.rb +59 -59
  24. data/lib/axlsx/drawing/bubble_series.rb +63 -63
  25. data/lib/axlsx/drawing/cat_axis.rb +85 -85
  26. data/lib/axlsx/drawing/chart.rb +299 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +91 -90
  28. data/lib/axlsx/drawing/drawing.rb +167 -167
  29. data/lib/axlsx/drawing/graphic_frame.rb +54 -54
  30. data/lib/axlsx/drawing/hyperlink.rb +100 -100
  31. data/lib/axlsx/drawing/line_3D_chart.rb +68 -68
  32. data/lib/axlsx/drawing/line_chart.rb +99 -99
  33. data/lib/axlsx/drawing/line_series.rb +110 -110
  34. data/lib/axlsx/drawing/marker.rb +84 -84
  35. data/lib/axlsx/drawing/num_data.rb +52 -52
  36. data/lib/axlsx/drawing/num_data_source.rb +62 -62
  37. data/lib/axlsx/drawing/num_val.rb +34 -34
  38. data/lib/axlsx/drawing/one_cell_anchor.rb +99 -99
  39. data/lib/axlsx/drawing/pic.rb +211 -211
  40. data/lib/axlsx/drawing/picture_locking.rb +42 -42
  41. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -47
  42. data/lib/axlsx/drawing/pie_series.rb +74 -74
  43. data/lib/axlsx/drawing/scaling.rb +60 -60
  44. data/lib/axlsx/drawing/scatter_chart.rb +74 -74
  45. data/lib/axlsx/drawing/scatter_series.rb +129 -129
  46. data/lib/axlsx/drawing/ser_axis.rb +45 -45
  47. data/lib/axlsx/drawing/series.rb +69 -69
  48. data/lib/axlsx/drawing/series_title.rb +25 -25
  49. data/lib/axlsx/drawing/str_data.rb +42 -42
  50. data/lib/axlsx/drawing/str_val.rb +34 -34
  51. data/lib/axlsx/drawing/title.rb +107 -97
  52. data/lib/axlsx/drawing/two_cell_anchor.rb +97 -97
  53. data/lib/axlsx/drawing/val_axis.rb +37 -37
  54. data/lib/axlsx/drawing/view_3D.rb +115 -115
  55. data/lib/axlsx/drawing/vml_drawing.rb +42 -42
  56. data/lib/axlsx/drawing/vml_shape.rb +66 -66
  57. data/lib/axlsx/package.rb +398 -388
  58. data/lib/axlsx/rels/relationship.rb +130 -130
  59. data/lib/axlsx/rels/relationships.rb +32 -32
  60. data/lib/axlsx/stylesheet/border.rb +73 -73
  61. data/lib/axlsx/stylesheet/border_pr.rb +71 -71
  62. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -132
  63. data/lib/axlsx/stylesheet/cell_protection.rb +41 -41
  64. data/lib/axlsx/stylesheet/cell_style.rb +72 -72
  65. data/lib/axlsx/stylesheet/color.rb +76 -76
  66. data/lib/axlsx/stylesheet/dxf.rb +79 -79
  67. data/lib/axlsx/stylesheet/fill.rb +35 -35
  68. data/lib/axlsx/stylesheet/font.rb +156 -156
  69. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -103
  70. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -37
  71. data/lib/axlsx/stylesheet/num_fmt.rb +86 -86
  72. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -73
  73. data/lib/axlsx/stylesheet/styles.rb +535 -494
  74. data/lib/axlsx/stylesheet/table_style.rb +54 -54
  75. data/lib/axlsx/stylesheet/table_style_element.rb +77 -77
  76. data/lib/axlsx/stylesheet/table_styles.rb +46 -46
  77. data/lib/axlsx/stylesheet/xf.rb +147 -147
  78. data/lib/axlsx/util/accessors.rb +64 -64
  79. data/lib/axlsx/util/constants.rb +416 -410
  80. data/lib/axlsx/util/mime_type_utils.rb +11 -11
  81. data/lib/axlsx/util/options_parser.rb +16 -16
  82. data/lib/axlsx/util/serialized_attributes.rb +89 -89
  83. data/lib/axlsx/util/simple_typed_list.rb +179 -179
  84. data/lib/axlsx/util/storage.rb +146 -146
  85. data/lib/axlsx/util/validators.rb +312 -312
  86. data/lib/axlsx/util/zip_command.rb +73 -73
  87. data/lib/axlsx/version.rb +5 -5
  88. data/lib/axlsx/workbook/defined_name.rb +128 -128
  89. data/lib/axlsx/workbook/defined_names.rb +21 -21
  90. data/lib/axlsx/workbook/shared_strings_table.rb +77 -77
  91. data/lib/axlsx/workbook/workbook.rb +425 -395
  92. data/lib/axlsx/workbook/workbook_view.rb +80 -80
  93. data/lib/axlsx/workbook/workbook_views.rb +22 -22
  94. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -77
  95. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
  96. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -244
  97. data/lib/axlsx/workbook/worksheet/border_creator.rb +76 -0
  98. data/lib/axlsx/workbook/worksheet/break.rb +35 -35
  99. data/lib/axlsx/workbook/worksheet/cell.rb +532 -506
  100. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  101. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  102. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
  103. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  104. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  105. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  106. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  107. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  108. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  110. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  111. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  112. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  113. data/lib/axlsx/workbook/worksheet/data_validation.rb +267 -246
  114. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  115. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  116. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  117. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  118. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  119. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  120. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  121. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  122. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  123. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  124. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  125. data/lib/axlsx/workbook/worksheet/pivot_table.rb +335 -296
  126. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  127. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  128. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  129. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  130. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  131. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  132. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  133. data/lib/axlsx/workbook/worksheet/row.rb +164 -164
  134. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  135. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  136. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  137. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  138. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  139. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  140. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  141. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  142. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  143. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  144. data/lib/axlsx/workbook/worksheet/worksheet.rb +829 -786
  145. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  148. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  149. data/lib/axlsx.rb +204 -185
  150. data/lib/caxlsx.rb +2 -2
  151. data/lib/schema/dc.xsd +118 -118
  152. data/lib/schema/dcmitype.xsd +51 -51
  153. data/lib/schema/dcterms.xsd +331 -331
  154. data/lib/schema/dml-chartDrawing.xsd +146 -146
  155. data/lib/schema/dml-compatibility.xsd +14 -14
  156. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  157. data/lib/schema/dml-main.xsd +3048 -3048
  158. data/lib/schema/dml-picture.xsd +23 -23
  159. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  160. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  161. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  162. data/lib/schema/shared-bibliography.xsd +144 -144
  163. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  164. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  165. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  166. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  167. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  168. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  169. data/lib/schema/shared-relationshipReference.xsd +25 -25
  170. data/lib/schema/vml-main.xsd +569 -569
  171. data/lib/schema/vml-officeDrawing.xsd +509 -509
  172. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  173. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  174. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  175. data/lib/schema/xml.xsd +116 -116
  176. metadata +5 -252
  177. data/test/benchmark.rb +0 -72
  178. data/test/content_type/tc_content_type.rb +0 -76
  179. data/test/content_type/tc_default.rb +0 -16
  180. data/test/content_type/tc_override.rb +0 -14
  181. data/test/doc_props/tc_app.rb +0 -43
  182. data/test/doc_props/tc_core.rb +0 -42
  183. data/test/drawing/tc_area_chart.rb +0 -39
  184. data/test/drawing/tc_area_series.rb +0 -71
  185. data/test/drawing/tc_axes.rb +0 -8
  186. data/test/drawing/tc_axis.rb +0 -112
  187. data/test/drawing/tc_bar_3D_chart.rb +0 -86
  188. data/test/drawing/tc_bar_chart.rb +0 -86
  189. data/test/drawing/tc_bar_series.rb +0 -46
  190. data/test/drawing/tc_bubble_chart.rb +0 -44
  191. data/test/drawing/tc_bubble_series.rb +0 -21
  192. data/test/drawing/tc_cat_axis.rb +0 -31
  193. data/test/drawing/tc_cat_axis_data.rb +0 -27
  194. data/test/drawing/tc_chart.rb +0 -123
  195. data/test/drawing/tc_d_lbls.rb +0 -57
  196. data/test/drawing/tc_data_source.rb +0 -23
  197. data/test/drawing/tc_drawing.rb +0 -80
  198. data/test/drawing/tc_graphic_frame.rb +0 -27
  199. data/test/drawing/tc_hyperlink.rb +0 -64
  200. data/test/drawing/tc_line_3d_chart.rb +0 -47
  201. data/test/drawing/tc_line_chart.rb +0 -39
  202. data/test/drawing/tc_line_series.rb +0 -71
  203. data/test/drawing/tc_marker.rb +0 -44
  204. data/test/drawing/tc_named_axis_data.rb +0 -27
  205. data/test/drawing/tc_num_data.rb +0 -31
  206. data/test/drawing/tc_num_val.rb +0 -29
  207. data/test/drawing/tc_one_cell_anchor.rb +0 -66
  208. data/test/drawing/tc_pic.rb +0 -103
  209. data/test/drawing/tc_picture_locking.rb +0 -72
  210. data/test/drawing/tc_pie_3D_chart.rb +0 -28
  211. data/test/drawing/tc_pie_series.rb +0 -33
  212. data/test/drawing/tc_scaling.rb +0 -36
  213. data/test/drawing/tc_scatter_chart.rb +0 -48
  214. data/test/drawing/tc_scatter_series.rb +0 -74
  215. data/test/drawing/tc_ser_axis.rb +0 -31
  216. data/test/drawing/tc_series.rb +0 -23
  217. data/test/drawing/tc_series_title.rb +0 -54
  218. data/test/drawing/tc_str_data.rb +0 -18
  219. data/test/drawing/tc_str_val.rb +0 -30
  220. data/test/drawing/tc_title.rb +0 -70
  221. data/test/drawing/tc_two_cell_anchor.rb +0 -36
  222. data/test/drawing/tc_val_axis.rb +0 -24
  223. data/test/drawing/tc_view_3D.rb +0 -54
  224. data/test/drawing/tc_vml_drawing.rb +0 -25
  225. data/test/drawing/tc_vml_shape.rb +0 -106
  226. data/test/fixtures/image1.gif +0 -0
  227. data/test/fixtures/image1.jpeg +0 -0
  228. data/test/fixtures/image1.jpg +0 -0
  229. data/test/fixtures/image1.png +0 -0
  230. data/test/fixtures/image1_fake.jpg +0 -0
  231. data/test/profile.rb +0 -24
  232. data/test/rels/tc_relationship.rb +0 -52
  233. data/test/rels/tc_relationships.rb +0 -37
  234. data/test/stylesheet/tc_border.rb +0 -37
  235. data/test/stylesheet/tc_border_pr.rb +0 -32
  236. data/test/stylesheet/tc_cell_alignment.rb +0 -81
  237. data/test/stylesheet/tc_cell_protection.rb +0 -29
  238. data/test/stylesheet/tc_cell_style.rb +0 -57
  239. data/test/stylesheet/tc_color.rb +0 -43
  240. data/test/stylesheet/tc_dxf.rb +0 -81
  241. data/test/stylesheet/tc_fill.rb +0 -18
  242. data/test/stylesheet/tc_font.rb +0 -133
  243. data/test/stylesheet/tc_gradient_fill.rb +0 -72
  244. data/test/stylesheet/tc_gradient_stop.rb +0 -31
  245. data/test/stylesheet/tc_num_fmt.rb +0 -30
  246. data/test/stylesheet/tc_pattern_fill.rb +0 -43
  247. data/test/stylesheet/tc_styles.rb +0 -309
  248. data/test/stylesheet/tc_table_style.rb +0 -44
  249. data/test/stylesheet/tc_table_style_element.rb +0 -45
  250. data/test/stylesheet/tc_table_styles.rb +0 -29
  251. data/test/stylesheet/tc_xf.rb +0 -120
  252. data/test/tc_axlsx.rb +0 -109
  253. data/test/tc_helper.rb +0 -10
  254. data/test/tc_package.rb +0 -317
  255. data/test/util/tc_mime_type_utils.rb +0 -13
  256. data/test/util/tc_serialized_attributes.rb +0 -19
  257. data/test/util/tc_simple_typed_list.rb +0 -77
  258. data/test/util/tc_validators.rb +0 -210
  259. data/test/workbook/tc_defined_name.rb +0 -49
  260. data/test/workbook/tc_shared_strings_table.rb +0 -59
  261. data/test/workbook/tc_workbook.rb +0 -165
  262. data/test/workbook/tc_workbook_view.rb +0 -50
  263. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +0 -38
  264. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +0 -76
  265. data/test/workbook/worksheet/auto_filter/tc_filters.rb +0 -50
  266. data/test/workbook/worksheet/tc_break.rb +0 -49
  267. data/test/workbook/worksheet/tc_cell.rb +0 -465
  268. data/test/workbook/worksheet/tc_cfvo.rb +0 -31
  269. data/test/workbook/worksheet/tc_col.rb +0 -93
  270. data/test/workbook/worksheet/tc_color_scale.rb +0 -58
  271. data/test/workbook/worksheet/tc_comment.rb +0 -72
  272. data/test/workbook/worksheet/tc_comments.rb +0 -57
  273. data/test/workbook/worksheet/tc_conditional_formatting.rb +0 -224
  274. data/test/workbook/worksheet/tc_data_bar.rb +0 -46
  275. data/test/workbook/worksheet/tc_data_validation.rb +0 -265
  276. data/test/workbook/worksheet/tc_date_time_converter.rb +0 -124
  277. data/test/workbook/worksheet/tc_header_footer.rb +0 -151
  278. data/test/workbook/worksheet/tc_icon_set.rb +0 -45
  279. data/test/workbook/worksheet/tc_outline_pr.rb +0 -19
  280. data/test/workbook/worksheet/tc_page_margins.rb +0 -97
  281. data/test/workbook/worksheet/tc_page_set_up_pr.rb +0 -15
  282. data/test/workbook/worksheet/tc_page_setup.rb +0 -143
  283. data/test/workbook/worksheet/tc_pane.rb +0 -54
  284. data/test/workbook/worksheet/tc_pivot_table.rb +0 -180
  285. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +0 -62
  286. data/test/workbook/worksheet/tc_print_options.rb +0 -72
  287. data/test/workbook/worksheet/tc_protected_range.rb +0 -17
  288. data/test/workbook/worksheet/tc_rich_text.rb +0 -44
  289. data/test/workbook/worksheet/tc_rich_text_run.rb +0 -173
  290. data/test/workbook/worksheet/tc_row.rb +0 -160
  291. data/test/workbook/worksheet/tc_selection.rb +0 -55
  292. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +0 -18
  293. data/test/workbook/worksheet/tc_sheet_format_pr.rb +0 -88
  294. data/test/workbook/worksheet/tc_sheet_pr.rb +0 -49
  295. data/test/workbook/worksheet/tc_sheet_protection.rb +0 -117
  296. data/test/workbook/worksheet/tc_sheet_view.rb +0 -214
  297. data/test/workbook/worksheet/tc_table.rb +0 -77
  298. data/test/workbook/worksheet/tc_table_style_info.rb +0 -53
  299. data/test/workbook/worksheet/tc_worksheet.rb +0 -632
  300. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +0 -55
data/lib/axlsx.rb CHANGED
@@ -1,185 +1,204 @@
1
- # encoding: UTF-8
2
- require 'htmlentities'
3
- require 'axlsx/version.rb'
4
- require 'marcel'
5
-
6
- require 'axlsx/util/simple_typed_list.rb'
7
- require 'axlsx/util/constants.rb'
8
- require 'axlsx/util/validators.rb'
9
- require 'axlsx/util/accessors.rb'
10
- require 'axlsx/util/serialized_attributes'
11
- require 'axlsx/util/options_parser'
12
- require 'axlsx/util/mime_type_utils'
13
- require 'axlsx/util/zip_command'
14
-
15
- require 'axlsx/stylesheet/styles.rb'
16
-
17
- require 'axlsx/doc_props/app.rb'
18
- require 'axlsx/doc_props/core.rb'
19
- require 'axlsx/content_type/content_type.rb'
20
- require 'axlsx/rels/relationships.rb'
21
-
22
- require 'axlsx/drawing/drawing.rb'
23
- require 'axlsx/workbook/workbook.rb'
24
- require 'axlsx/package.rb'
25
- #required gems
26
- require 'nokogiri'
27
- require 'zip'
28
-
29
- #core dependencies
30
- require 'bigdecimal'
31
- require 'time'
32
-
33
- #if object does not have this already, I am borrowing it from active_support.
34
- # I am a very big fan of activesupports instance_values method, but do not want to require nor include the entire
35
- # library just for this one method.
36
- if !Object.respond_to?(:instance_values)
37
- Object.send :public # patch for 1.8.7 as it uses private scope
38
- Object.send :define_method, :instance_values do
39
- Hash[instance_variables.map { |name| [name.to_s[1..-1], instance_variable_get(name)] }]
40
- end
41
- end
42
-
43
- # xlsx generation with charts, images, automated column width, customizable styles
44
- # and full schema validation. Axlsx excels at helping you generate beautiful
45
- # Office Open XML Spreadsheet documents without having to understand the entire
46
- # ECMA specification. Check out the README for some examples of how easy it is.
47
- # Best of all, you can validate your xlsx file before serialization so you know
48
- # for sure that anything generated is going to load on your client's machine.
49
- module Axlsx
50
-
51
- # determines the cell range for the items provided
52
- def self.cell_range(cells, absolute=true)
53
- return "" unless cells.first.is_a? Cell
54
-
55
- first_cell, last_cell = cells.minmax_by(&:pos)
56
- reference = "#{first_cell.reference(absolute)}:#{last_cell.reference(absolute)}"
57
- if absolute
58
- escaped_name = first_cell.row.worksheet.name.gsub ''', "''"
59
- "'#{escaped_name}'!#{reference}"
60
- else
61
- reference
62
- end
63
- end
64
-
65
- # sorts the array of cells provided to start from the minimum x,y to
66
- # the maximum x.y#
67
- # @param [Array] cells
68
- # @return [Array]
69
- def self.sort_cells(cells)
70
- cells.sort_by(&:pos)
71
- end
72
-
73
- #global reference html entity encoding
74
- # @return [HtmlEntities]
75
- def self.coder
76
- @@coder ||= ::HTMLEntities.new
77
- end
78
-
79
- # returns the x, y position of a cell
80
- def self.name_to_indices(name)
81
- raise ArgumentError, 'invalid cell name' unless name.size > 1
82
-
83
- letters_str = name[/[A-Z]+/]
84
-
85
- # capitalization?!?
86
- v = letters_str.reverse.chars.reduce({:base=>1, :i=>0}) do |val, c|
87
- val[:i] += ((c.bytes.first - 64) * val[:base])
88
-
89
- val[:base] *= 26
90
-
91
- next val
92
- end
93
-
94
- col_index = (v[:i] - 1)
95
-
96
- numbers_str = name[/[1-9][0-9]*/]
97
-
98
- row_index = (numbers_str.to_i - 1)
99
-
100
- return [col_index, row_index]
101
- end
102
-
103
- # converts the column index into alphabetical values.
104
- # @note This follows the standard spreadsheet convention of naming columns A to Z, followed by AA to AZ etc.
105
- # @return [String]
106
- def self.col_ref(index)
107
- chars = ''
108
- while index >= 26 do
109
- index, char = index.divmod(26)
110
- chars.prepend((char + 65).chr)
111
- index -= 1
112
- end
113
- chars.prepend((index + 65).chr)
114
- chars
115
- end
116
-
117
- # @return [String] The alpha(column)numeric(row) reference for this sell.
118
- # @example Relative Cell Reference
119
- # ws.rows.first.cells.first.r #=> "A1"
120
- def self.cell_r(c_index, r_index)
121
- col_ref(c_index) << (r_index+1).to_s
122
- end
123
-
124
- # Creates an array of individual cell references based on an excel reference range.
125
- # @param [String] range A cell range, for example A1:D5
126
- # @return [Array]
127
- def self.range_to_a(range)
128
- range.match(/^(\w+?\d+)\:(\w+?\d+)$/)
129
- start_col, start_row = name_to_indices($1)
130
- end_col, end_row = name_to_indices($2)
131
- (start_row..end_row).to_a.map do |row_num|
132
- (start_col..end_col).to_a.map do |col_num|
133
- cell_r(col_num, row_num)
134
- end
135
- end
136
- end
137
-
138
- # performs the increadible feat of changing snake_case to CamelCase
139
- # @param [String] s The snake case string to camelize
140
- # @return [String]
141
- def self.camel(s="", all_caps = true)
142
- s = s.to_s
143
- s = s.capitalize if all_caps
144
- s.gsub(/_(.)/){ $1.upcase }
145
- end
146
-
147
- # returns the provided string with all invalid control charaters
148
- # removed.
149
- # @param [String] str The string to process
150
- # @return [String]
151
- def self.sanitize(str)
152
- if str.frozen?
153
- str.delete(CONTROL_CHARS)
154
- else
155
- str.delete!(CONTROL_CHARS)
156
- str
157
- end
158
- end
159
-
160
- # If value is boolean return 1 or 0
161
- # else return the value
162
- # @param [Object] value The value to process
163
- # @return [Object]
164
- def self.booleanize(value)
165
- if value == true || value == false
166
- value ? 1 : 0
167
- else
168
- value
169
- end
170
- end
171
-
172
- # Instructs the serializer to not try to escape cell value input.
173
- # This will give you a huge speed bonus, but if you content has <, > or other xml character data
174
- # the workbook will be invalid and excel will complain.
175
- def self.trust_input
176
- @trust_input ||= false
177
- end
178
-
179
- # @param[Boolean] trust_me A boolean value indicating if the cell value content is to be trusted
180
- # @return [Boolean]
181
- # @see Axlsx::trust_input
182
- def self.trust_input=(trust_me)
183
- @trust_input = trust_me
184
- end
185
- end
1
+ # encoding: UTF-8
2
+ require 'htmlentities'
3
+ require 'axlsx/version.rb'
4
+ require 'marcel'
5
+
6
+ require 'axlsx/util/simple_typed_list.rb'
7
+ require 'axlsx/util/constants.rb'
8
+ require 'axlsx/util/validators.rb'
9
+ require 'axlsx/util/accessors.rb'
10
+ require 'axlsx/util/serialized_attributes'
11
+ require 'axlsx/util/options_parser'
12
+ require 'axlsx/util/mime_type_utils'
13
+ require 'axlsx/util/zip_command'
14
+
15
+ require 'axlsx/stylesheet/styles.rb'
16
+
17
+ require 'axlsx/doc_props/app.rb'
18
+ require 'axlsx/doc_props/core.rb'
19
+ require 'axlsx/content_type/content_type.rb'
20
+ require 'axlsx/rels/relationships.rb'
21
+
22
+ require 'axlsx/drawing/drawing.rb'
23
+ require 'axlsx/workbook/workbook.rb'
24
+ require 'axlsx/package.rb'
25
+ #required gems
26
+ require 'nokogiri'
27
+ require 'zip'
28
+
29
+ #core dependencies
30
+ require 'bigdecimal'
31
+ require 'set'
32
+ require 'time'
33
+
34
+ begin
35
+ if Gem.loaded_specs.has_key?("axlsx_styler")
36
+ raise StandardError.new("Please remove `axlsx_styler` from your Gemfile, the associated functionality is now built-in to `caxlsx` directly.")
37
+ end
38
+ rescue
39
+ # Do nothing
40
+ end
41
+
42
+ # xlsx generation with charts, images, automated column width, customizable styles
43
+ # and full schema validation. Axlsx excels at helping you generate beautiful
44
+ # Office Open XML Spreadsheet documents without having to understand the entire
45
+ # ECMA specification. Check out the README for some examples of how easy it is.
46
+ # Best of all, you can validate your xlsx file before serialization so you know
47
+ # for sure that anything generated is going to load on your client's machine.
48
+ module Axlsx
49
+ # I am a very big fan of activesupports instance_values method, but do not want to require nor include the entire
50
+ # library just for this one method.
51
+ #
52
+ # Defining as a class method on Axlsx to refrain from monkeypatching Object for all users of this gem.
53
+ def self.instance_values_for(object)
54
+ Hash[object.instance_variables.map { |name| [name.to_s[1..-1], object.instance_variable_get(name)] }]
55
+ end
56
+
57
+ # determines the cell range for the items provided
58
+ def self.cell_range(cells, absolute=true)
59
+ return "" unless cells.first.is_a? Cell
60
+
61
+ first_cell, last_cell = cells.minmax_by(&:pos)
62
+ reference = "#{first_cell.reference(absolute)}:#{last_cell.reference(absolute)}"
63
+ if absolute
64
+ escaped_name = first_cell.row.worksheet.name.gsub '&apos;', "''"
65
+ "'#{escaped_name}'!#{reference}"
66
+ else
67
+ reference
68
+ end
69
+ end
70
+
71
+ # sorts the array of cells provided to start from the minimum x,y to
72
+ # the maximum x.y#
73
+ # @param [Array] cells
74
+ # @return [Array]
75
+ def self.sort_cells(cells)
76
+ cells.sort_by(&:pos)
77
+ end
78
+
79
+ #global reference html entity encoding
80
+ # @return [HtmlEntities]
81
+ def self.coder
82
+ @@coder ||= ::HTMLEntities.new
83
+ end
84
+
85
+ # returns the x, y position of a cell
86
+ def self.name_to_indices(name)
87
+ raise ArgumentError, 'invalid cell name' unless name.size > 1
88
+
89
+ letters_str = name[/[A-Z]+/]
90
+
91
+ # capitalization?!?
92
+ v = letters_str.reverse.chars.reduce({:base=>1, :i=>0}) do |val, c|
93
+ val[:i] += ((c.bytes.first - 64) * val[:base])
94
+
95
+ val[:base] *= 26
96
+
97
+ next val
98
+ end
99
+
100
+ col_index = (v[:i] - 1)
101
+
102
+ numbers_str = name[/[1-9][0-9]*/]
103
+
104
+ row_index = (numbers_str.to_i - 1)
105
+
106
+ return [col_index, row_index]
107
+ end
108
+
109
+ # converts the column index into alphabetical values.
110
+ # @note This follows the standard spreadsheet convention of naming columns A to Z, followed by AA to AZ etc.
111
+ # @return [String]
112
+ def self.col_ref(index)
113
+ chars = ''
114
+ while index >= 26 do
115
+ index, char = index.divmod(26)
116
+ chars.prepend((char + 65).chr)
117
+ index -= 1
118
+ end
119
+ chars.prepend((index + 65).chr)
120
+ chars
121
+ end
122
+
123
+ # @return [String] The alpha(column)numeric(row) reference for this sell.
124
+ # @example Relative Cell Reference
125
+ # ws.rows.first.cells.first.r #=> "A1"
126
+ def self.cell_r(c_index, r_index)
127
+ col_ref(c_index) << (r_index+1).to_s
128
+ end
129
+
130
+ # Creates an array of individual cell references based on an excel reference range.
131
+ # @param [String] range A cell range, for example A1:D5
132
+ # @return [Array]
133
+ def self.range_to_a(range)
134
+ range.match(/^(\w+?\d+)\:(\w+?\d+)$/)
135
+ start_col, start_row = name_to_indices($1)
136
+ end_col, end_row = name_to_indices($2)
137
+ (start_row..end_row).to_a.map do |row_num|
138
+ (start_col..end_col).to_a.map do |col_num|
139
+ cell_r(col_num, row_num)
140
+ end
141
+ end
142
+ end
143
+
144
+ # performs the increadible feat of changing snake_case to CamelCase
145
+ # @param [String] s The snake case string to camelize
146
+ # @return [String]
147
+ def self.camel(s="", all_caps = true)
148
+ s = s.to_s
149
+ s = s.capitalize if all_caps
150
+ s.gsub(/_(.)/){ $1.upcase }
151
+ end
152
+
153
+ # returns the provided string with all invalid control charaters
154
+ # removed.
155
+ # @param [String] str The string to process
156
+ # @return [String]
157
+ def self.sanitize(str)
158
+ if str.frozen?
159
+ str.delete(CONTROL_CHARS)
160
+ else
161
+ str.delete!(CONTROL_CHARS)
162
+ str
163
+ end
164
+ end
165
+
166
+ # If value is boolean return 1 or 0
167
+ # else return the value
168
+ # @param [Object] value The value to process
169
+ # @return [Object]
170
+ def self.booleanize(value)
171
+ if value == true || value == false
172
+ value ? 1 : 0
173
+ else
174
+ value
175
+ end
176
+ end
177
+
178
+ # utility method for performing a deep merge on a Hash
179
+ # @param [Hash] Hash to merge into
180
+ # @param [Hash] Hash to be added
181
+ def self.hash_deep_merge(first_hash, second_hash)
182
+ first_hash.merge(second_hash) do |key, this_val, other_val|
183
+ if this_val.is_a?(Hash) && other_val.is_a?(Hash)
184
+ Axlsx.hash_deep_merge(this_val, other_val)
185
+ else
186
+ other_val
187
+ end
188
+ end
189
+ end
190
+
191
+ # Instructs the serializer to not try to escape cell value input.
192
+ # This will give you a huge speed bonus, but if you content has <, > or other xml character data
193
+ # the workbook will be invalid and excel will complain.
194
+ def self.trust_input
195
+ @trust_input ||= false
196
+ end
197
+
198
+ # @param[Boolean] trust_me A boolean value indicating if the cell value content is to be trusted
199
+ # @return [Boolean]
200
+ # @see Axlsx::trust_input
201
+ def self.trust_input=(trust_me)
202
+ @trust_input = trust_me
203
+ end
204
+ end
data/lib/caxlsx.rb CHANGED
@@ -1,2 +1,2 @@
1
- # encoding: UTF-8
2
- require 'axlsx.rb'
1
+ # encoding: UTF-8
2
+ require 'axlsx.rb'
data/lib/schema/dc.xsd CHANGED
@@ -1,118 +1,118 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
3
- xmlns="http://purl.org/dc/elements/1.1/"
4
- targetNamespace="http://purl.org/dc/elements/1.1/"
5
- elementFormDefault="qualified"
6
- attributeFormDefault="unqualified">
7
-
8
- <xs:annotation>
9
- <xs:documentation xml:lang="en">
10
- DCMES 1.1 XML Schema
11
- XML Schema for http://purl.org/dc/elements/1.1/ namespace
12
-
13
- Created 2003-04-02
14
-
15
- Created by
16
-
17
- Tim Cole (t-cole3@uiuc.edu)
18
- Tom Habing (thabing@uiuc.edu)
19
- Jane Hunter (jane@dstc.edu.au)
20
- Pete Johnston (p.johnston@ukoln.ac.uk),
21
- Carl Lagoze (lagoze@cs.cornell.edu)
22
-
23
- This schema declares XML elements for the 15 DC elements from the
24
- http://purl.org/dc/elements/1.1/ namespace.
25
-
26
- It defines a complexType SimpleLiteral which permits mixed content
27
- and makes the xml:lang attribute available. It disallows child elements by
28
- use of minOcccurs/maxOccurs.
29
-
30
- However, this complexType does permit the derivation of other complexTypes
31
- which would permit child elements.
32
-
33
- All elements are declared as substitutable for the abstract element any,
34
- which means that the default type for all elements is dc:SimpleLiteral.
35
-
36
- </xs:documentation>
37
-
38
- </xs:annotation>
39
-
40
-
41
- <xs:import namespace="http://www.w3.org/XML/1998/namespace"
42
- schemaLocation="xml.xsd">
43
- </xs:import>
44
-
45
- <xs:complexType name="SimpleLiteral">
46
- <xs:annotation>
47
- <xs:documentation xml:lang="en">
48
- This is the default type for all of the DC elements.
49
- It permits text content only with optional
50
- xml:lang attribute.
51
- Text is allowed because mixed="true", but sub-elements
52
- are disallowed because minOccurs="0" and maxOccurs="0"
53
- are on the xs:any tag.
54
-
55
- This complexType allows for restriction or extension permitting
56
- child elements.
57
- </xs:documentation>
58
- </xs:annotation>
59
-
60
- <xs:complexContent mixed="true">
61
- <xs:restriction base="xs:anyType">
62
- <xs:sequence>
63
- <xs:any processContents="lax" minOccurs="0" maxOccurs="0"/>
64
- </xs:sequence>
65
- <xs:attribute ref="xml:lang" use="optional"/>
66
- </xs:restriction>
67
- </xs:complexContent>
68
- </xs:complexType>
69
-
70
- <xs:element name="any" type="SimpleLiteral" abstract="true"/>
71
-
72
- <xs:element name="title" substitutionGroup="any"/>
73
- <xs:element name="creator" substitutionGroup="any"/>
74
- <xs:element name="subject" substitutionGroup="any"/>
75
- <xs:element name="description" substitutionGroup="any"/>
76
- <xs:element name="publisher" substitutionGroup="any"/>
77
- <xs:element name="contributor" substitutionGroup="any"/>
78
- <xs:element name="date" substitutionGroup="any"/>
79
- <xs:element name="type" substitutionGroup="any"/>
80
- <xs:element name="format" substitutionGroup="any"/>
81
- <xs:element name="identifier" substitutionGroup="any"/>
82
- <xs:element name="source" substitutionGroup="any"/>
83
- <xs:element name="language" substitutionGroup="any"/>
84
- <xs:element name="relation" substitutionGroup="any"/>
85
- <xs:element name="coverage" substitutionGroup="any"/>
86
- <xs:element name="rights" substitutionGroup="any"/>
87
-
88
- <xs:group name="elementsGroup">
89
- <xs:annotation>
90
- <xs:documentation xml:lang="en">
91
- This group is included as a convenience for schema authors
92
- who need to refer to all the elements in the
93
- http://purl.org/dc/elements/1.1/ namespace.
94
- </xs:documentation>
95
- </xs:annotation>
96
-
97
- <xs:sequence>
98
- <xs:choice minOccurs="0" maxOccurs="unbounded">
99
- <xs:element ref="any"/>
100
- </xs:choice>
101
- </xs:sequence>
102
- </xs:group>
103
-
104
- <xs:complexType name="elementContainer">
105
- <xs:annotation>
106
- <xs:documentation xml:lang="en">
107
- This complexType is included as a convenience for schema authors who need to define a root
108
- or container element for all of the DC elements.
109
- </xs:documentation>
110
- </xs:annotation>
111
-
112
- <xs:choice>
113
- <xs:group ref="elementsGroup"/>
114
- </xs:choice>
115
- </xs:complexType>
116
-
117
-
118
- </xs:schema>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
3
+ xmlns="http://purl.org/dc/elements/1.1/"
4
+ targetNamespace="http://purl.org/dc/elements/1.1/"
5
+ elementFormDefault="qualified"
6
+ attributeFormDefault="unqualified">
7
+
8
+ <xs:annotation>
9
+ <xs:documentation xml:lang="en">
10
+ DCMES 1.1 XML Schema
11
+ XML Schema for http://purl.org/dc/elements/1.1/ namespace
12
+
13
+ Created 2003-04-02
14
+
15
+ Created by
16
+
17
+ Tim Cole (t-cole3@uiuc.edu)
18
+ Tom Habing (thabing@uiuc.edu)
19
+ Jane Hunter (jane@dstc.edu.au)
20
+ Pete Johnston (p.johnston@ukoln.ac.uk),
21
+ Carl Lagoze (lagoze@cs.cornell.edu)
22
+
23
+ This schema declares XML elements for the 15 DC elements from the
24
+ http://purl.org/dc/elements/1.1/ namespace.
25
+
26
+ It defines a complexType SimpleLiteral which permits mixed content
27
+ and makes the xml:lang attribute available. It disallows child elements by
28
+ use of minOcccurs/maxOccurs.
29
+
30
+ However, this complexType does permit the derivation of other complexTypes
31
+ which would permit child elements.
32
+
33
+ All elements are declared as substitutable for the abstract element any,
34
+ which means that the default type for all elements is dc:SimpleLiteral.
35
+
36
+ </xs:documentation>
37
+
38
+ </xs:annotation>
39
+
40
+
41
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace"
42
+ schemaLocation="xml.xsd">
43
+ </xs:import>
44
+
45
+ <xs:complexType name="SimpleLiteral">
46
+ <xs:annotation>
47
+ <xs:documentation xml:lang="en">
48
+ This is the default type for all of the DC elements.
49
+ It permits text content only with optional
50
+ xml:lang attribute.
51
+ Text is allowed because mixed="true", but sub-elements
52
+ are disallowed because minOccurs="0" and maxOccurs="0"
53
+ are on the xs:any tag.
54
+
55
+ This complexType allows for restriction or extension permitting
56
+ child elements.
57
+ </xs:documentation>
58
+ </xs:annotation>
59
+
60
+ <xs:complexContent mixed="true">
61
+ <xs:restriction base="xs:anyType">
62
+ <xs:sequence>
63
+ <xs:any processContents="lax" minOccurs="0" maxOccurs="0"/>
64
+ </xs:sequence>
65
+ <xs:attribute ref="xml:lang" use="optional"/>
66
+ </xs:restriction>
67
+ </xs:complexContent>
68
+ </xs:complexType>
69
+
70
+ <xs:element name="any" type="SimpleLiteral" abstract="true"/>
71
+
72
+ <xs:element name="title" substitutionGroup="any"/>
73
+ <xs:element name="creator" substitutionGroup="any"/>
74
+ <xs:element name="subject" substitutionGroup="any"/>
75
+ <xs:element name="description" substitutionGroup="any"/>
76
+ <xs:element name="publisher" substitutionGroup="any"/>
77
+ <xs:element name="contributor" substitutionGroup="any"/>
78
+ <xs:element name="date" substitutionGroup="any"/>
79
+ <xs:element name="type" substitutionGroup="any"/>
80
+ <xs:element name="format" substitutionGroup="any"/>
81
+ <xs:element name="identifier" substitutionGroup="any"/>
82
+ <xs:element name="source" substitutionGroup="any"/>
83
+ <xs:element name="language" substitutionGroup="any"/>
84
+ <xs:element name="relation" substitutionGroup="any"/>
85
+ <xs:element name="coverage" substitutionGroup="any"/>
86
+ <xs:element name="rights" substitutionGroup="any"/>
87
+
88
+ <xs:group name="elementsGroup">
89
+ <xs:annotation>
90
+ <xs:documentation xml:lang="en">
91
+ This group is included as a convenience for schema authors
92
+ who need to refer to all the elements in the
93
+ http://purl.org/dc/elements/1.1/ namespace.
94
+ </xs:documentation>
95
+ </xs:annotation>
96
+
97
+ <xs:sequence>
98
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
99
+ <xs:element ref="any"/>
100
+ </xs:choice>
101
+ </xs:sequence>
102
+ </xs:group>
103
+
104
+ <xs:complexType name="elementContainer">
105
+ <xs:annotation>
106
+ <xs:documentation xml:lang="en">
107
+ This complexType is included as a convenience for schema authors who need to define a root
108
+ or container element for all of the DC elements.
109
+ </xs:documentation>
110
+ </xs:annotation>
111
+
112
+ <xs:choice>
113
+ <xs:group ref="elementsGroup"/>
114
+ </xs:choice>
115
+ </xs:complexType>
116
+
117
+
118
+ </xs:schema>