caxlsx 3.0.4 → 3.2.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 (294) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +354 -334
  5. data/LICENSE +21 -21
  6. data/README.md +168 -170
  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 -151
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -143
  22. data/lib/axlsx/drawing/bar_series.rb +97 -80
  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 +276 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +90 -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 -98
  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 +97 -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 +388 -363
  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 -71
  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 +494 -420
  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 +410 -401
  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 +395 -370
  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/break.rb +35 -35
  98. data/lib/axlsx/workbook/worksheet/cell.rb +506 -505
  99. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  100. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  101. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
  102. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  103. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  104. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  105. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  106. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  107. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  108. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  110. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  111. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  112. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -246
  113. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  114. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  115. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  116. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  117. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  118. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  119. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  120. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  121. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  122. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  123. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  124. data/lib/axlsx/workbook/worksheet/pivot_table.rb +296 -289
  125. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  126. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  127. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  128. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  129. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  130. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  131. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  132. data/lib/axlsx/workbook/worksheet/row.rb +164 -162
  133. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  134. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  135. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  136. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  137. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  138. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  139. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  140. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  141. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  142. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  143. data/lib/axlsx/workbook/worksheet/worksheet.rb +786 -764
  144. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  145. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  148. data/lib/axlsx.rb +185 -170
  149. data/lib/caxlsx.rb +2 -2
  150. data/lib/schema/dc.xsd +118 -118
  151. data/lib/schema/dcmitype.xsd +51 -51
  152. data/lib/schema/dcterms.xsd +331 -331
  153. data/lib/schema/dml-chartDrawing.xsd +146 -146
  154. data/lib/schema/dml-compatibility.xsd +14 -14
  155. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  156. data/lib/schema/dml-main.xsd +3048 -3048
  157. data/lib/schema/dml-picture.xsd +23 -23
  158. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  159. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  160. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  161. data/lib/schema/shared-bibliography.xsd +144 -144
  162. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  163. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  164. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  165. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  166. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  167. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  168. data/lib/schema/shared-relationshipReference.xsd +25 -25
  169. data/lib/schema/vml-main.xsd +569 -569
  170. data/lib/schema/vml-officeDrawing.xsd +509 -509
  171. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  172. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  173. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  174. data/lib/schema/xml.xsd +116 -116
  175. data/test/benchmark.rb +72 -72
  176. data/test/content_type/tc_content_type.rb +76 -76
  177. data/test/content_type/tc_default.rb +16 -16
  178. data/test/content_type/tc_override.rb +14 -14
  179. data/test/doc_props/tc_app.rb +43 -43
  180. data/test/doc_props/tc_core.rb +42 -42
  181. data/test/drawing/tc_area_chart.rb +39 -39
  182. data/test/drawing/tc_area_series.rb +71 -71
  183. data/test/drawing/tc_axes.rb +7 -7
  184. data/test/drawing/tc_axis.rb +112 -112
  185. data/test/drawing/tc_bar_3D_chart.rb +86 -71
  186. data/test/drawing/tc_bar_chart.rb +86 -71
  187. data/test/drawing/tc_bar_series.rb +46 -37
  188. data/test/drawing/tc_bubble_chart.rb +44 -44
  189. data/test/drawing/tc_bubble_series.rb +21 -21
  190. data/test/drawing/tc_cat_axis.rb +31 -31
  191. data/test/drawing/tc_cat_axis_data.rb +27 -27
  192. data/test/drawing/tc_chart.rb +123 -123
  193. data/test/drawing/tc_d_lbls.rb +57 -57
  194. data/test/drawing/tc_data_source.rb +23 -23
  195. data/test/drawing/tc_drawing.rb +80 -80
  196. data/test/drawing/tc_graphic_frame.rb +27 -27
  197. data/test/drawing/tc_hyperlink.rb +64 -64
  198. data/test/drawing/tc_line_3d_chart.rb +47 -47
  199. data/test/drawing/tc_line_chart.rb +39 -39
  200. data/test/drawing/tc_line_series.rb +71 -71
  201. data/test/drawing/tc_marker.rb +44 -44
  202. data/test/drawing/tc_named_axis_data.rb +27 -27
  203. data/test/drawing/tc_num_data.rb +31 -31
  204. data/test/drawing/tc_num_val.rb +29 -29
  205. data/test/drawing/tc_one_cell_anchor.rb +66 -66
  206. data/test/drawing/tc_pic.rb +103 -103
  207. data/test/drawing/tc_picture_locking.rb +72 -72
  208. data/test/drawing/tc_pie_3D_chart.rb +28 -28
  209. data/test/drawing/tc_pie_series.rb +33 -33
  210. data/test/drawing/tc_scaling.rb +36 -36
  211. data/test/drawing/tc_scatter_chart.rb +48 -48
  212. data/test/drawing/tc_scatter_series.rb +74 -56
  213. data/test/drawing/tc_ser_axis.rb +31 -31
  214. data/test/drawing/tc_series.rb +23 -23
  215. data/test/drawing/tc_series_title.rb +54 -54
  216. data/test/drawing/tc_str_data.rb +18 -18
  217. data/test/drawing/tc_str_val.rb +30 -30
  218. data/test/drawing/tc_title.rb +70 -70
  219. data/test/drawing/tc_two_cell_anchor.rb +36 -36
  220. data/test/drawing/tc_val_axis.rb +24 -24
  221. data/test/drawing/tc_view_3D.rb +54 -54
  222. data/test/drawing/tc_vml_drawing.rb +25 -25
  223. data/test/drawing/tc_vml_shape.rb +106 -106
  224. data/test/profile.rb +24 -24
  225. data/test/rels/tc_relationship.rb +52 -52
  226. data/test/rels/tc_relationships.rb +37 -37
  227. data/test/stylesheet/tc_border.rb +37 -37
  228. data/test/stylesheet/tc_border_pr.rb +32 -32
  229. data/test/stylesheet/tc_cell_alignment.rb +81 -81
  230. data/test/stylesheet/tc_cell_protection.rb +29 -29
  231. data/test/stylesheet/tc_cell_style.rb +57 -57
  232. data/test/stylesheet/tc_color.rb +43 -43
  233. data/test/stylesheet/tc_dxf.rb +81 -81
  234. data/test/stylesheet/tc_fill.rb +18 -18
  235. data/test/stylesheet/tc_font.rb +133 -133
  236. data/test/stylesheet/tc_gradient_fill.rb +72 -72
  237. data/test/stylesheet/tc_gradient_stop.rb +31 -31
  238. data/test/stylesheet/tc_num_fmt.rb +30 -30
  239. data/test/stylesheet/tc_pattern_fill.rb +43 -43
  240. data/test/stylesheet/tc_styles.rb +309 -261
  241. data/test/stylesheet/tc_table_style.rb +44 -44
  242. data/test/stylesheet/tc_table_style_element.rb +45 -45
  243. data/test/stylesheet/tc_table_styles.rb +29 -29
  244. data/test/stylesheet/tc_xf.rb +120 -120
  245. data/test/tc_axlsx.rb +109 -109
  246. data/test/tc_helper.rb +10 -12
  247. data/test/tc_package.rb +317 -264
  248. data/test/util/tc_mime_type_utils.rb +13 -13
  249. data/test/util/tc_serialized_attributes.rb +19 -19
  250. data/test/util/tc_simple_typed_list.rb +77 -77
  251. data/test/util/tc_validators.rb +210 -210
  252. data/test/workbook/tc_defined_name.rb +49 -49
  253. data/test/workbook/tc_shared_strings_table.rb +59 -59
  254. data/test/workbook/tc_workbook.rb +165 -160
  255. data/test/workbook/tc_workbook_view.rb +50 -50
  256. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -38
  257. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -76
  258. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -50
  259. data/test/workbook/worksheet/tc_break.rb +49 -49
  260. data/test/workbook/worksheet/tc_cell.rb +465 -453
  261. data/test/workbook/worksheet/tc_cfvo.rb +31 -31
  262. data/test/workbook/worksheet/tc_col.rb +93 -93
  263. data/test/workbook/worksheet/tc_color_scale.rb +58 -58
  264. data/test/workbook/worksheet/tc_comment.rb +72 -72
  265. data/test/workbook/worksheet/tc_comments.rb +57 -57
  266. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -224
  267. data/test/workbook/worksheet/tc_data_bar.rb +46 -46
  268. data/test/workbook/worksheet/tc_data_validation.rb +265 -265
  269. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -124
  270. data/test/workbook/worksheet/tc_header_footer.rb +151 -151
  271. data/test/workbook/worksheet/tc_icon_set.rb +45 -45
  272. data/test/workbook/worksheet/tc_outline_pr.rb +19 -19
  273. data/test/workbook/worksheet/tc_page_margins.rb +97 -97
  274. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -15
  275. data/test/workbook/worksheet/tc_page_setup.rb +143 -143
  276. data/test/workbook/worksheet/tc_pane.rb +54 -54
  277. data/test/workbook/worksheet/tc_pivot_table.rb +180 -135
  278. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +62 -54
  279. data/test/workbook/worksheet/tc_print_options.rb +72 -72
  280. data/test/workbook/worksheet/tc_protected_range.rb +17 -17
  281. data/test/workbook/worksheet/tc_rich_text.rb +44 -44
  282. data/test/workbook/worksheet/tc_rich_text_run.rb +173 -173
  283. data/test/workbook/worksheet/tc_row.rb +160 -139
  284. data/test/workbook/worksheet/tc_selection.rb +55 -55
  285. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -18
  286. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -88
  287. data/test/workbook/worksheet/tc_sheet_pr.rb +49 -49
  288. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -117
  289. data/test/workbook/worksheet/tc_sheet_view.rb +214 -214
  290. data/test/workbook/worksheet/tc_table.rb +77 -67
  291. data/test/workbook/worksheet/tc_table_style_info.rb +53 -53
  292. data/test/workbook/worksheet/tc_worksheet.rb +632 -601
  293. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -55
  294. metadata +11 -11
data/lib/axlsx.rb CHANGED
@@ -1,170 +1,185 @@
1
- # encoding: UTF-8
2
- require 'htmlentities'
3
- require 'axlsx/version.rb'
4
- require 'mimemagic'
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
- cells = sort_cells(cells)
55
- reference = "#{cells.first.reference(absolute)}:#{cells.last.reference(absolute)}"
56
- if absolute
57
- escaped_name = cells.first.row.worksheet.name.gsub ''', "''"
58
- "'#{escaped_name}'!#{reference}"
59
- else
60
- reference
61
- end
62
- end
63
-
64
- # sorts the array of cells provided to start from the minimum x,y to
65
- # the maximum x.y#
66
- # @param [Array] cells
67
- # @return [Array]
68
- def self.sort_cells(cells)
69
- cells.sort { |x, y| [x.index, x.row.row_index] <=> [y.index, y.row.row_index] }
70
- end
71
-
72
- #global reference html entity encoding
73
- # @return [HtmlEntities]
74
- def self.coder
75
- @@coder ||= ::HTMLEntities.new
76
- end
77
-
78
- # returns the x, y position of a cell
79
- def self.name_to_indices(name)
80
- raise ArgumentError, 'invalid cell name' unless name.size > 1
81
- # capitalization?!?
82
- v = name[/[A-Z]+/].reverse.chars.reduce({:base=>1, :i=>0}) do |val, c|
83
- val[:i] += ((c.bytes.first - 64) * val[:base]); val[:base] *= 26; val
84
- end
85
- [v[:i]-1, ((name[/[1-9][0-9]*/]).to_i)-1]
86
- end
87
-
88
- # converts the column index into alphabetical values.
89
- # @note This follows the standard spreadsheet convention of naming columns A to Z, followed by AA to AZ etc.
90
- # @return [String]
91
- def self.col_ref(index)
92
- chars = ''
93
- while index >= 26 do
94
- index, char = index.divmod(26)
95
- chars.prepend((char + 65).chr)
96
- index -= 1
97
- end
98
- chars.prepend((index + 65).chr)
99
- chars
100
- end
101
-
102
- # @return [String] The alpha(column)numeric(row) reference for this sell.
103
- # @example Relative Cell Reference
104
- # ws.rows.first.cells.first.r #=> "A1"
105
- def self.cell_r(c_index, r_index)
106
- col_ref(c_index) << (r_index+1).to_s
107
- end
108
-
109
- # Creates an array of individual cell references based on an excel reference range.
110
- # @param [String] range A cell range, for example A1:D5
111
- # @return [Array]
112
- def self.range_to_a(range)
113
- range.match(/^(\w+?\d+)\:(\w+?\d+)$/)
114
- start_col, start_row = name_to_indices($1)
115
- end_col, end_row = name_to_indices($2)
116
- (start_row..end_row).to_a.map do |row_num|
117
- (start_col..end_col).to_a.map do |col_num|
118
- cell_r(col_num, row_num)
119
- end
120
- end
121
- end
122
-
123
- # performs the increadible feat of changing snake_case to CamelCase
124
- # @param [String] s The snake case string to camelize
125
- # @return [String]
126
- def self.camel(s="", all_caps = true)
127
- s = s.to_s
128
- s = s.capitalize if all_caps
129
- s.gsub(/_(.)/){ $1.upcase }
130
- end
131
-
132
- # returns the provided string with all invalid control charaters
133
- # removed.
134
- # @param [String] str The string to process
135
- # @return [String]
136
- def self.sanitize(str)
137
- if str.frozen?
138
- str.delete(CONTROL_CHARS)
139
- else
140
- str.delete!(CONTROL_CHARS)
141
- str
142
- end
143
- end
144
-
145
- # If value is boolean return 1 or 0
146
- # else return the value
147
- # @param [Object] value The value to process
148
- # @return [Object]
149
- def self.booleanize(value)
150
- if value == true || value == false
151
- value ? 1 : 0
152
- else
153
- value
154
- end
155
- end
156
-
157
- # Instructs the serializer to not try to escape cell value input.
158
- # This will give you a huge speed bonus, but if you content has <, > or other xml character data
159
- # the workbook will be invalid and excel will complain.
160
- def self.trust_input
161
- @trust_input ||= false
162
- end
163
-
164
- # @param[Boolean] trust_me A boolean value indicating if the cell value content is to be trusted
165
- # @return [Boolean]
166
- # @see Axlsx::trust_input
167
- def self.trust_input=(trust_me)
168
- @trust_input = trust_me
169
- end
170
- 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 '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 '&apos;', "''"
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
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>